在Dictionary中标记后查找匹配值

时间:2018-03-14 15:36:56

标签: python unicode python-unicode

我已阅读文本文件并转换为字典。我已经获得了字典的键并列出了一个列表。我打开了另一个文本文件,我已将其标记化了。我也在键中找到了标记化的单词。但它是在文件i中的某处打印,我想说第一个令牌首先打印匹配键,然后打印下一个令牌匹配值...但它不是以那种方式打印。

import nltk
import codecs
from nltk.tokenize import word_tokenize
f = codecs.open('bangaladict.txt', encoding='utf-8')

dictionary = {}
for line in f:
    line1 = line
    try:
        data = line1.split("\t")
        dictionary.update({data[0]: data[1].rstrip()})
    except:
        pass   
        dictionary_list=[]
        for y in dictionary.keys():
            dictionary_list.append(y)
        print(dictionary_list,"\t")

        with open('bengali.txt',encoding='utf-8') as fin:
            tokens = word_tokenize(fin.read())
        print(tokens)
        for i in dictionary_list:
            for a in tokens:
                if a.encode('utf-8') == i.encode('utf-8'):
                    print(i)

请帮忙。

1 个答案:

答案 0 :(得分:0)

我想我已经理解了你想要达到的目标。您没有按令牌顺序获取值的原因是因为您定义了循环结构的方式。

让我们说dictionary_list包含值[a, b, c, d, e]tokens数组包含值[e, i, y, a, b]。 当外循环执行时,i的值为a。第二个循环检查标记(按句子顺序排列)并在a遇到index = 3,因此打印a

但您希望首先打印e,因为它首先出现在令牌中。

<强>解决方案: 交换循环定义

for a in tokens:
    for i in definitions:
        if a.encode('utf-8') == i.encode('utf-8'):
             print(i)

for a in tokens:
    if a.encode('utf-8') in dictionary_list:
         print(a)

这样,程序首先从e保留tokens,如果字典中存在e(确实存在),则打印e,依此类推。 / p>

希望这能解决您的问题。