python - 如何保存另一个文件中存在的关键字?
问题描述
我有一个包含一对关键字(k1
,k2
)的列表。这是一个示例:
print (word_pairs)
--->[('salaire', 'dépense'), ('gratuité', 'argent'), ('causesmwedemwelamwemort', 'cadres'), ('caractèresmwedumwedispositif', 'historique'), ('psychomotricienmwediplôme', 'infirmier'), ('impôtmwesurmwelesmweréunionsmwesportives', 'compensation'), ('affichage', 'affichagemweopinion'), ('délaimweprorogation', 'défaillance'), ('créancemwenotion', 'généralités')]
我有一个文本文件r_isa.txt
(205MB),其中包含共享“isa”关系的单词。这是一个示例,其中\t
表示文字制表符:
égalité de Parseval\tformule_0.9333\tégalité_1.0
filiation illégitime\tfiliation_1.0
Loi reconnaissant l'égalité\tloi_1.0
égalité entre les sexes\tégalité_1.0
liberté égalité fraternité\tliberté_1.0
这基本上意味着,“égalité de Parseval”是一个得分为 0.9333 的“公式”和一个得分为 1 的“égalité”。等等。
我想根据 r_isa 文件知道关键字是否与关键字k1
有上位词关系,反之亦然k2
。(如果k1
is-ak2
或k2
is-a k1
)。在输出文件中,我想在每一行中保存一对确实具有 is-a 关系的单词。
这是我所做的:
#Reading data as list
keywords = [line for line in open('version_final_PMI_espace.txt', encoding='utf8')]
keywords = ast.literal_eval(keywords[0])
word_pairs = []
for k,v in keywords.items():
if v:
word_pairs.append((k,v[0][0]))
len(list(set(word_pairs)))
#####
with open("r_isa.txt",encoding="utf-8") as readfile, open('Hyperonymy_file_pair.txt', 'w') as writefile:
for line in readfile:
firstfield = line.split('\t')[0]
for w in word_pairs:
if w[0]==firstfield:
if w[1] in line:
writefile.write("".join(w[0]) + "\t"+"".join(w[1]) +"\n" )
这不会给我任何错误,但这是我的问题:
时间太长了:我让它运行了一个小时,它并没有停止。
这种只处理一种方式 ( if w[0]==firstfield)
,计划是一旦它完成运行,我通过更改w[0]
为w[1]
(不是很优雅) 独立处理另一种方式。还有其他选择吗?
解决方案
目前,您正在循环一个 205mb 的文件,并且只将 w 存储在您的单词对中(因此,如果您的单词对列表只有一个条目,那么您仍在循环 205mb!)
由于这里的内存不是问题,但速度是问题,您可以使用 2 个字典查找;使用 k1/ w[0] 作为第一个字典中的键(以 k2s 列表作为值),在第二个字典中使用 k2 作为键,并以 k1s 列表作为值。
一旦您准备好字典一次,您就可以将字典提取出来,而不是读取制表符分隔的文本文件。应该快一点。
推荐阅读
- macros - Sublime 无法在宏中打开 new_file
- r - 在ggplot图中保留空白类别
- python - 如何在 selenium python 中使用 xpath 获取错误消息文本?
- java - 如何使用 jdbcTemplate 在 Java 代码中按降序显示评分
- python - 为什么 Cython 编译为 C 比 C++ 等价物快得多
- apache-spark - 使用 groupby 在另一列上聚合具有条件的行上的列
- excel - 为什么在 VBA 中引用另一个工作簿/工作表时出现下标超出范围错误 9?
- visual-studio - Blazor WebAssembly 发布失败
- java - 我想在单击单选按钮时为该布局设置动画。但它不起作用
- apache-kafka - NestJs - Kafka 对有效负载进行过滤