小编Gin*_*ino的帖子

在 NLP 任务的文本预处理中处理 \u200b(零宽度空间)字符

我正在为我正在训练的 NER 模型预处理一些文本,并且我经常遇到这个角色。这个字符不会被删除strip()

>>> 'Hello world!\u200b'.strip()
'Hello world!\u200b'
Run Code Online (Sandbox Code Playgroud)

它不被视为正则表达式的空格:

>>> re.sub('\s+', ' ', "hello\u200bworld!")
'hello\u200bworld!'
Run Code Online (Sandbox Code Playgroud)

并且 spaCy 的标记器不会在其上拆分标记:

>>> [t.text for t in nlp("hello\u200bworld!")]
['hello\u200bworld', '!']
Run Code Online (Sandbox Code Playgroud)

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

谢谢。

python nlp removing-whitespace spacy

7
推荐指数
1
解决办法
4286
查看次数

使用机器学习的段落分割

我有一个PDF格式的大型文档库.这些文件来自不同的来源,没有一种单一的风格.我使用Tika从文档中提取文本,现在我想将文本分段为段落.

我不能使用正则表达式,因为文档没有单一的样式:

  • \nl段落之间的数量在2到4之间.
  • 在某些文档中,单个段落中的行分隔为2 \nl,有些则为单个\nl.

所以我转向机器学习.在(伟大的)Python NLTK书中,使用"."之前和之后的字符等属性对句子进行分词时,可以很好地使用分类.有贝叶斯网络,但没有段落分割.

所以我的问题是:

  • 还有另一种段落分割方式吗?
  • 如果我使用机器学习,是否有可用于培训的分段段落的标记数据?

python nlp machine-learning apache-tika text-segmentation

5
推荐指数
1
解决办法
999
查看次数

标记 HTML 文档

我有一个 HTML 文档,我想使用 spaCy 对其进行标记,同时将 HTML 标记保留为单个标记。这是我的代码:

import spacy
from spacy.symbols import ORTH
nlp = spacy.load('en', vectors=False, parser=False, entity=False)

nlp.tokenizer.add_special_case(u'<i>', [{ORTH: u'<i>'}])
nlp.tokenizer.add_special_case(u'</i>', [{ORTH: u'</i>'}])

doc = nlp('Hello, <i>world</i> !')

print([e.text for e in doc])
Run Code Online (Sandbox Code Playgroud)

输出是:

['Hello', ',', '<', 'i', '>', 'world</i', '>', '!']
Run Code Online (Sandbox Code Playgroud)

如果我在标签周围放置空格,如下所示:

doc = nlp('Hello, <i> world </i> !')
Run Code Online (Sandbox Code Playgroud)

输出是我想要的:

['Hello', ',', '<i>', 'world', '</i>', '!']
Run Code Online (Sandbox Code Playgroud)

但我想避免对 HTML 进行复杂的预处理。

知道我该如何解决这个问题吗?

html python nlp spacy

5
推荐指数
1
解决办法
2538
查看次数

spaCy 2.0:保存和加载自定义NER模型

我已经在spaCy中使用自定义令牌生成器训练了自定义NER模型。我想保存不带分词器的NER模型。我在spaCy支持论坛中尝试了以下代码:

import spacy

nlp = spacy.load("en")
nlp.tokenizer = some_custom_tokenizer
# Train the NER model...
nlp.tokenizer = None
nlp.to_disk('/tmp/my_model', disable=['tokenizer'])
Run Code Online (Sandbox Code Playgroud)

当我尝试加载它时,管道是空的,而且令人惊讶的是它具有默认的spaCy标记器。

nlp = spacy.blank('en').from_disk('/tmp/model', disable=['tokenizer'])
Run Code Online (Sandbox Code Playgroud)

知道如何在没有标记器的情况下加载模型,但要获得完整的管道吗?谢谢

python nlp spacy

5
推荐指数
1
解决办法
3260
查看次数