【问题标题】:separate texts into sentences NLTK vs spaCy将文本分成句子 NLTK vs spaCy
【发布时间】:2019-10-18 09:01:17
【问题描述】:

我想把文本分成句子。

查看堆栈溢出我发现:

使用 NLTK

from nltk.tokenize import sent_tokenize
text="""Hello Mr. Smith, how are you doing today? The weathe is great, and city is awesome. The sky is pinkish-blue. You shouldn't eat cardboard"""
tokenized_text=sent_tokenize(text)
print(tokenized_text)

宽敞

from spacy.lang.en import English # updated

raw_text = 'Hello, world. Here are two sentences.'
nlp = English()
nlp.add_pipe(nlp.create_pipe('sentencizer')) # updated
doc = nlp(raw_text)
sentences = [sent.string.strip() for sent in doc.sents]

问题是 spacy 在后台必须使用所谓的 create_pipe 以不同方式执行此操作。 句子对于训练你自己的 NLP 词嵌入很重要。 spaCy 不直接包含开箱即用的句子标记器应该是有原因的。

谢谢。

注意:请注意,简单的 .split(.) 不起作用,文本中有几个十进制数字和其他包含“.”的标记

【问题讨论】:

  • 我想我明白你的意思了。请记住,spaCy 是一个简单的框架,首先为初学者或通才从业者提供简单的 NLP。它可以自定义,但默认情况下,如果您使用更专业的解决方案,您必须进行一些调整 - 您甚至可以为它训练模型!

标签: python nlp nltk spacy sentence


【解决方案1】:

spaCy 中的处理管道具有模块化设置,此处提供了更多信息:https://spacy.io/usage/processing-pipelines。您可以通过定义管道来定义所需的部分。在某些用例中,您可能不需要句子,例如当您只需要词袋表示时。所以我想这可能就是为什么sentencizer 并不总是自动包含在内 - 但如果你需要它就在那里。

请注意,English() 是一个非常通用的模型 - 您可以在此处找到一些更有用的预训练统计模型:https://spacy.io/models/en

【讨论】:

【解决方案2】:

默认情况下,spaCy 使用其依赖解析器进行句子分割,这需要加载统计模型。 sentencizer 是一个基于规则的分句器,您可以使用它来定义自己的分句规则,而无需加载模型。

如果您不介意激活解析器,可以使用以下代码:

import spacy
nlp = spacy.load('en_core_web_sm') # or whatever model you have installed
raw_text = 'Hello, world. Here are two sentences.'
doc = nlp(raw_text)
sentences = [sent.string.strip() for sent in doc.sents]

【讨论】:

    猜你喜欢
    • 2022-07-06
    • 2014-06-04
    • 2017-04-18
    • 1970-01-01
    • 1970-01-01
    • 2011-11-03
    • 1970-01-01
    • 1970-01-01
    • 2019-08-27
    相关资源
    最近更新 更多