我已阅读文本文件并转换为字典。我已经获得了字典的键并列出了一个列表。我打开了另一个文本文件,我已将其标记化了。我也在键中找到了标记化的单词。但它是在文件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)
请帮忙。
答案 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>
希望这能解决您的问题。