【发布时间】:2014-11-02 08:16:32
【问题描述】:
我想从一个字符串中创建一个句子列表,然后将它们打印出来。我不想使用 NLTK 来执行此操作。因此,它需要在句尾分割一个句点,而不是小数、缩写或名称的标题,或者如果句子有 .com 这是尝试正则表达式不起作用。
import re
text = """\
Mr. Smith bought cheapsite.com for 1.5 million dollars, i.e. he paid a lot for it. Did he mind? Adam Jones Jr. thinks he didn't. In any case, this isn't true... Well, with a probability of .9 it isn't.
"""
sentences = re.split(r' *[\.\?!][\'"\)\]]* *', text)
for stuff in sentences:
print(stuff)
它应该是什么样子的示例输出
Mr. Smith bought cheapsite.com for 1.5 million dollars, i.e. he paid a lot for it.
Did he mind?
Adam Jones Jr. thinks he didn't.
In any case, this isn't true...
Well, with a probability of .9 it isn't.
【问题讨论】:
-
装满猴子的桶:即使不使用“NLTK”,也要使用比单个正则表达式更合适的东西。
-
您不想使用 NLTK 的任何特殊原因?这是exactly what it does,等等。还有this可以看一下,又是一个小库做这个(其实是用正则表达式做的)。
-
解析自然的人类语言和人类撰写的文本对于计算机来说非常非常困难,并且有很多细微之处。为什么不想使用专为此类问题设计的 NLTK?
-
基本的 NLTK
tokenize.sent_tokenize()非常残酷。请参阅我的答案,了解它出错的一大堆事情。不要不尊重 OP 或问题,这实际上是非常重要且有趣的,并且是一个积极研究的主题。 -
@user3590149 试试 virtualenv;这使您可以创建一个沙盒 Python 环境,可以在其中安装您喜欢的任何包