我的程序接受一个文本文件并使用split('.')
将每个句子拆分成一个列表,这意味着它会在注册完全停止时拆分,但它可能不准确。
str='i love carpets. In fact i own 2.4 km of the stuff.'
listOfSentences = ['i love carpets', 'in fact i own 2', '4 km of the stuff']
listOfSentences = ['i love carpets', 'in fact i own 2.4 km of the stuff']
我的问题是:如何分割句子的结尾而不是每次句号。
答案 0 :(得分:3)
任何基于正则表达式的方法都无法处理像"我看到史密斯先生的情况。" ,并且为这些情况添加黑客攻击是不可扩展的。用户 est 已经评论过,任何严肃的实现都会使用数据。
如果您只需要处理英语,那么spaCy优于NLTK:
from spacy.en import English
en = English()
doc = en(u'i love carpets. In fact i own 2.4 km of the stuff.')
for s in list(doc.sents):
print s.string
更新:spaCy现在支持多种语言。
答案 1 :(得分:0)
如果你的句子都以"。"结尾。和"。 ",你可以试试正则表达式:
import re
text = "your text here. i.e. something."
sentences = re.split(r'(?<!\w\.\w.)(?<![A-Z][a-z]\.)(?<=\.|\?)\s', text)
来源:Python - RegEx for splitting text into sentences (sentence-tokenizing)
答案 2 :(得分:0)
我发现https://github.com/fnl/syntok/很好,实际上是所有受欢迎的产品中最好的。具体来说,我在英语新闻文章上测试了nltk(punkt),spacy和syntok。
import syntok.segmenter as segmenter
document = "some text. some more text"
for paragraph in segmenter.analyze(document):
for sentence in paragraph:
for token in sentence:
# exactly reproduce the input
# and do not remove "imperfections"
print(token.spacing, token.value, sep='', end='')
print("\n") # reinsert paragraph separators
答案 3 :(得分:-1)
最简单的方法是将一个点分隔后跟一个空格:
>>> s = 'i love carpets. In fact i own 2.4 km of the stuff.'
>>> s.split('. ')
['i love carpets', 'In fact i own 2.4 km of the stuff.']
答案 4 :(得分:-1)