【问题标题】:Handling \u200b (Zero width space) character in text preprocessing for NLP task在 NLP 任务的文本预处理中处理 \u200b(零宽度空间)字符
【发布时间】:2017-12-05 08:46:08
【问题描述】:

我正在为我正在训练的 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', '!']

那么,我该如何处理呢?我可以简单地替换它,但是我不想为这个字符做一个特殊的情况,而是替换所有具有相似特征的字符。

谢谢。

【问题讨论】:

  • 该字符的定义表明它具体 不是 空格或空白字符。 fileformat.info/info/unicode/char/200B/index.htm 如果人们不正确地使用它,那么它并没有很好地定义到底该怎么做。这就是你的 NLP ...
  • 没错,但我正在预处理的一些文本是使用 Apache Tika 从 PDF 中提取的。

标签: python nlp removing-whitespace spacy


【解决方案1】:

在 NLP 之前简单地进行字符串替换怎么样?

'Hello world!\u200b'.replace('\u200b', ' ').strip()

【讨论】:

  • 正如我在问题中所写:我可以简单地替换它,但是,我不想为这个字符做一个特殊的情况,而是替换所有具有相似特征的字符我>
【解决方案2】:

如您所述,\u200b (零宽度空格)\u200c (零宽度非连接符) 等字符不被视为空格字符.因此,您不能使用可用于空格字符的技术省略此类字符。 您可能已经注意到,唯一的方法是将此类字符视为特殊情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-01
    • 2013-01-13
    • 1970-01-01
    • 2011-10-26
    • 1970-01-01
    • 2019-08-19
    • 1970-01-01
    • 2017-09-18
    相关资源
    最近更新 更多