在字典中分词后查找匹配值
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
,依此类推.
希望这能解决您的问题。
我已经阅读了一个文本文件并转换为字典。我已经获得了字典的键并列出了一个列表。我打开了另一个文本文件,并将其标记化。我也在钥匙中找到了标记化的词。但它正在文件中的某处打印,我想说第一个标记有匹配的键首先被打印,下一个标记匹配的值接下来被打印......但它不是以这种方式打印。
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
,依此类推.
希望这能解决您的问题。