Обработка символа (пробел нулевой ширины) в предварительной обработке текста для задачи 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()
Другие вопросы по тегам