Обработка символа (пробел нулевой ширины) в предварительной обработке текста для задачи NLP
Я препроцессирую текст для модели NER, которую я тренирую, и довольно часто сталкиваюсь с этим персонажем. Этот персонаж не удаляется с strip()
:
>>> 'Hello world!\u200b'.strip()
'Hello world!\u200b'
Это не считается пробелом для регулярных выражений:
>>> re.sub('\s+', ' ', "hello\u200bworld!")
'hello\u200bworld!'
и токенизатор spaCy не разделяет токены на него:
>>> [t.text for t in nlp("hello\u200bworld!")]
['hello\u200bworld', '!']
Итак, как мне справиться с этим? Я могу просто заменить его, однако я не хочу делать особый случай для этого персонажа, а вместо этого заменю все символы с похожими характеристиками.
Благодарю.
0 ответов
Как вы упомянули, такие персонажи, как \u200b
(пространство нулевой ширины) и \u200c
(с нулевой шириной без объединения) не считаются пробелом. Таким образом, вы не можете опустить такие символы, используя методы, доступные для символов пробела. Единственный способ, как вы могли заметить, - рассматривать такие символы как особый случай.
Как насчет простой замены строки перед НЛП?
'Hello world!\u200b'.replace('\u200b', ' ').strip()