我无法弄清楚如何获取冗长文档的文本文件,并将该文本文件中的每个句子附加到列表中。并非所有句子都会在一段时间内结束,因此必须考虑所有结束字符,但也可能存在“。”在一个句子中,所以我不能在一段时间内切断搜索句子。我假设这可以通过添加一个条件来修复,在句点之后它应该跟一个空格,但我不知道如何设置它所以我把文本文件中的每个句子放入列表作为元件。
我正在编写的程序基本上允许用户输入关键字搜索(键),并输入要在找到关键字的句子之前和之后返回的多个句子(值)。所以它或多或少是研究助手,因此用户不必阅读大量的文本文件来查找他们想要的信息。
从我到目前为止所学到的,将句子放入列表中是最简单的方法,但我无法弄清楚它的第一部分。如果我能弄清楚这一部分,其余部分应该很容易拼凑起来。
所以我想简而言之,
如果我有Sentence. Sentence. Sentence. Sentence. Sentence. Sentence. Sentence. Sentence. Sentence. Sentence. Sentence. Sentence.
我需要以下列形式列出文件内容:
sentence_list = [Sentence, Sentence, Sentence, Sentence, Sentence, Sentence, Sentence, Sentence, Sentence, Sentence, Sentence, Sentence]
答案 0 :(得分:1)
首先将文本文件读入容器中。 然后使用正则表达式来解析文档。 这只是关于如何使用split()方法来破解字符串的示例
import re
file = open("test.txt", "r")
doclist = [ line for line in file ]
docstr = '' . join(doclist)
sentences = re.split(r'[.!?]', docstr)
答案 1 :(得分:1)
这是一个非常难的问题,但它没有一个简单的答案。您可以尝试编写一个捕获所有已知情况的正则表达式,但复杂的正则表达式往往难以维护和调试。有许多现有的库可以帮助您解决这个问题。最值得注意的是The Natural Language Toolkit,它内置了许多标记器。你可以用pip安装它。
pip install nltk
然后获得你的句子将是一个相当简单(虽然高度可定制)的事情。这是使用提供的句子标记化器
的简单示例import nltk
with(open('text.txt', 'r') as in_file):
text = in_file.read()
sents = nltk.sent_tokenize(text)
我不完全清楚你的句子是如何划分的,如果不是通过正常的标点符号,但是在我的文本上运行上面的代码我得到:
[ "我无法弄清楚如何获取冗长文档的文本文件,并将该文本文件中的每个句子附加到列表中。",
"并非所有句子都会在一段时间内结束,因此必须考虑所有的结尾字符,但也可能会有一个''"",
"在句子中,所以我无法在一段时间内切断搜索句子。",
"我假设这可以通过添加一个条件来修复,在句点之后它应该跟一个空格,但我不知道如何设置它所以我得到每个句子文本文件作为元素放入列表中。\ n \ n" ]
但输入失败如:["这是一个带有。"的句子,"一个正好位于中间的句子。"]
同时传递如下输入:["这是一段句子,一段时间就在中间"]
但是,我不知道你是否会比开箱即用好得多。从nltk代码:使用无监督算法构建的句子标记器 缩写词,搭配词和起始词的模型 句子;然后使用该模型查找句子边界。 这种方法已被证明适用于许多欧洲人 语言。
所以nltk解决方案实际上是使用机器学习来构建句子模型。比正则表达好多了,但仍然不完美。该死的自然语言。 >:(
希望这会有所帮助:)