【发布时间】:2021-07-29 10:29:07
【问题描述】:
所以这个程序的目的是为ner.txt中的每个单词找到例句。例如,如果单词apple 在ner.txt 中,那么我想查找是否有任何句子包含单词apple 并输出类似apple: you should buy an apple juice 的内容。
所以代码的逻辑非常简单,因为我在ner.txt. 中每个单词只需要一个例句。我正在使用 NLTK 来确定它是否是一个句子。
问题出在代码的底部。我正在使用 2 个 for 循环来查找每个单词的例句。这非常缓慢并且不适用于大文件。我怎样才能使这个高效?或者没有我的逻辑有没有更好的方法来做到这一点?
from nltk.tokenize import sent_tokenize
news_articles = "test.txt"
oov_ner = "ner.txt"
news_data = ""
with open(news_articles, "r") as inFile:
news_data = inFile.read()
base_news = sent_tokenize(news_data)
with open(oov_ner, "r") as oovNER:
oov_ner_content = oovNER.readlines()
oov_ner_data = [x.strip() for x in oov_ner_content]
my_dict = {}
for oovner in oov_ner_data:
for news in base_news:
if oovner in news:
my_dict[oovner] = news
print(my_dict)
【问题讨论】:
-
嗨,你可以做的最好的方法是,首先标记你检测到的句子,然后创建倒排索引,然后每个单词就像一个查询一样在倒排索引中找到。其他方式你可以做到这一点,如果你不想使用倒排索引,你可以使用 itertool python 模块中的 Product() 方法在一个列表中创建所有句子和单词对,然后使用一个循环来比较它们。
标签: python python-3.x nlp nltk