我有一个代码,它将两个文件作为输入: (1)字典/词典 (2)文本文件(每行一个句子)
我的代码的第一部分读取元组中的字典,因此输出如下内容:
('mthy3lkw', 'weakBelief', 'U')
('mthy3lkm', 'firmBelief', 'B')
('mthy3lh', 'notBelief', 'A')
代码的第二部分是在文本文件中的每个句子中搜索那些元组中位置0的单词,然后打印出句子,搜索词及其类型。
因此,给定句子mthy3lkw和网格3arif,期望的输出是:
鉴于突出显示的单词在字典中找到,[“mthy3lkw ana mesh 3arif”,“ mthy3lkw ”,“weakBelief”,“U”]。
我的代码的第二部分 - 匹配部分 - 太慢了。如何让它更快?
这是我的代码
findings = []
for sentence in data: # I open the sentences file with .readlines()
for word in tuples: # similar to the ones mentioned above
p1 = re.compile('\\b%s\\b'%word[0]) # get the first word in every tuple
if p1.findall(sentence) and word[1] == "firmBelief":
findings.append([sentence, word[0], "firmBelief"])
print findings
答案 0 :(得分:1)
将您的元组列表转换为trie,并将其用于搜索。
答案 1 :(得分:1)
构建一个dict查找结构,以便您可以快速从元组中找到正确的结构。然后你可以重构你的循环,这样你就不必遍历你的每个句子的整个字典,试图匹配每个条目,而是翻阅句子中的每个单词并在字典词典中查找:
# Create a lookup structure for words
word_dictionary = dict((entry[0], entry) for entry in tuples)
findings = []
word_re = re.compile(r'\b\S+\b') # only need to create the regexp once
for sentence in data:
for word in word_re.findall(sentence): # Check every word in the sentence
if word in word_dictionary: # A match was found
entry = word_dictionary[word]
findings.append([sentence, word, entry[1], entry[2]])