在巨大的句子列表中检查dict关键字的有效方法

时间:2014-06-04 14:59:57

标签: python

我需要检查myDict中的每个键是否出现在大文本的句子中,大约200万个单词。如果找到了key,则打印键和所有找到它的句子。程序从myList创建dict。

  

myList :[' Luke / NP 1 / NUM',' 1 / NUM而/ P many / ADJ已经/ V承担/ VN到/ TO编译/ V a / DET语句/ N / P / DET事实/ N / / WH是/ V给定/ VN满/ ADJ信用/ N / P us / PRO,/,',' 2 / NUM只/ /作为/ P那些/ DET谁/ WH来自/ P-LSB - /(/ DET -RSB- /)开始/ VG成为/ VD目击者/ N和/ CNJ服务员/ N / P / DET消息/ N已传送/ VN这些/ DET到/ TO我们/ PRO,/,',...]

预期结果如下:

和[' CNJ']

  

2 / NUM只/ /作为/ P那些/ DET谁/ WH来自/ P-LSB - /(/ DET -RSB- /)开始/ VG成为/ VD目击者/ N 和/ CNJ < / strong>服务员/ N / P / DET消息/ N已交付/ VN这些/ DET到/ TO我们/ PRO,/,

[&#39; P&#39;]

中的

  

1 / NUM而/ P many / ADJ有/ V承担/ VN到/ TO编译/ V a / DET陈述/ N / P / DET事实/ N / WH是/ V给定/ VN满/ ADJ信任/ N / P us / PRO,/,

到[&#39; TO&#39;]

  

1 / NUM而/ P many / ADJ已经/ V承担/ VN 到/ TO 编译/ V a / DET陈述/ N / P / DET事实/ N / WH是/ V给定/ VN满/ ADJ信用/ N / P us / PRO,/,

     

2 / NUM只/ /作为/ P那些/ DET谁/ WH来自/ P-LSB - /(/ DET -RSB- /)开始/ VG成为/ VD目击者/ N和/ CNJ服务员/ N / P / DET消息/ N已传送/ VN这些/ DET 到/ TO 我们/ PRO,/,

     

............

我的代码工作量很小,但延迟了大量的文本。请伙计们,我相信有办法解决这个问题。以下是代码的一部分:

import sys
from collections import defaultdict

dic = defaultdict(list)

for sent in myList:
    wt_tupl = [wt.split('/') for wt in sent.split()]
    for (w,t) in wt_tupl:
        if w in dic and t in dic[w]:
            continue
        else:
            dic[w].append(t)

for k,v in dic.items():
    print k,v
    for i, sent in enumerate(f):
        wts = zip(*[wt.split('/') for wt in sent.split()])
        line = wts[0]

        if k in line:              #guess my problem is here!
            print sent.strip()

    print
    print

感谢。

1 个答案:

答案 0 :(得分:0)

你的问题在于字典中每个单词的整个文件。 相反,尝试只检查一次文件,检查每个单词是否在字典中。