簡體   English   中英

將文本分為句子NLTK vs spaCy

[英]separate texts into sentences NLTK vs spaCy

我想將文本分成句子。

在堆棧溢出中尋找,我發現:

與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使用其依賴性解析器進行句子分段,這需要加載統計模型。 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]

spaCy的處理管道具有模塊化設置,此處提供了更多信息: https : spaCy 您可以通過定義管道來定義所需的零件。 在某些用例中,您可能不需要句子,例如,當您只想用詞袋表示時。 因此,我想這可能就是為什么總不會自動包含sentencizer原因-但如果需要的話,它就在那里。

請注意, English()是一個非常通用的模型-您可以在此處找到一些更有用的預訓練統計模型: https : //spacy.io/models/en

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM