我没有CS背景,经常遇到以下问题。我有一个包含以下内容的文本文件:
abacial;abadengo;monástico;monacal;clerical;eclesiástico
abacora;avasalla;somete;sojuzga;supedita;rinde;acosa;hostiga
abacorar;acosar;acometer;sujetar
abacá;cabuya;cáñamo;fibra;filamento;pita
同一行中的所有单词都是同义词。我想在数据结构中加载它,以便查找给定单词的同义词是有效的。例如,给出查询:
'abadengo'
它应该在第一行找到它并返回剩余的单词:
['abacial', 'monástico', 'monacal', 'clerical', 'eclesiástico']
我不需要工作代码,我只暗示如何有效地完成这项工作。对我来说唯一的想法是创建一个dict,每个单词作为键,一个列表,同义词作为值,但这似乎是浪费的记忆。我也想过某种图表,但之前从未这样做,也不知道有更好的解决方案。
答案 0 :(得分:1)
我认为 Roget的词库有两个部分。将每个单词与一个数字(有时是几个数字)和一组编号的同义词列表配对的索引。效率是一个很滑的概念,这种方式节省空间,但需要两次查找才能找到答案。
答案 1 :(得分:0)
为避免浪费内存,请为每个同义词(包括其自身)使用dict
录制相同元组(元组比列表更高的内存效率),然后查找使用删除重复的功能很少。即:
syndict = {}
with open('the_file', 'r') as f:
for line in f:
syns = tuple(line.strip().split(';')(
for word in syns:
syndict[word] = syns
def lookup(word):
syns = syndict.get(word, ())
return [w for w in syns if w!=word]