在字典中分词后查找匹配值

Finding the matching value after tokenizing in the Dictionary

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

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)

请帮忙。

我想我已经明白你想要实现的目标了。您没有按标记顺序获取值的原因是您定义循环结构的方式。

假设 dictionary_list 包含值 [a, b, c, d, e]tokens 数组包含值 [e, i, y, a, b]。 当外层循环执行时,i的值为a。第二个循环检查标记(按句子顺序)并在 index = 3 处遇到 a,因此打印 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)

这样,程序首先从 tokens 保存 e,如果 e 存在于字典中(确实存在),它会打印 e,依此类推.

希望这能解决您的问题。