csv 如何匹配两个不同文件中的文本并提取值

p3rjfoxz  于 2022-12-06  发布在  其他
关注(0)|答案(3)|浏览(152)

所以我有两个文件。一个yaml文件包含tibetan words : its meaning。另一个csv文件只包含word和它的POStag。如下:
yaml文件:

ད་གདོད: ད་གཟོད་དང་དོན་འདྲ།
ད་ཆུ: དངུལ་ཆུ་ཡི་མིང་གཞན།
ད་ཕྲུག: དྭ་ཕྲུག་གི་འབྲི་ཚུལ་གཞན།
ད་བེར: སྒྲིབ་བྱེད་དང་རླུང་འགོག་བྱེད་ཀྱི་གླེགས་བུ་ལེབ་མོའི་མིང་།
ད་མེ་དུམ་མེ: དམ་དུམ་ལ་ལྟོས།

csv档案:

ད་ཆུ PART
ད་གདོད DET

所需输出:

ད་ཆུ PART དངུལ་ཆུ་ཡི་མིང་གཞན།
ད་གདོད DET ད་གཟོད་དང་དོན་འདྲ།

有什么想法如何使文本匹配从csv文件到yaml文件,并提取其含义在csv?

xuo3flqw

xuo3flqw1#

从功能的Angular 来看,您拥有:

  • 一个 * 字典 *,这里指的是一个键:价值 * 事物 *
  • 在该 * 字典 * 中搜索的 * 单词列表 *,这将产生一个 * 记录 *

如果内存可以容纳所有内容,可以先读取yaml文件生成Python字典,然后读取 words 文件,一次读取一行,并使用上面的字典生成预期的行。如果yaml文件太大,可以使用dbm(或shelve)模块作为 *on disk字典 *。
因为你没有显示任何代码,我也不能...我只能说你可以简单地把第二个文件作为一个纯文本文件来处理,一次读一行。对于第一个文件,你可以从PyPI中查找一个yaml模块,或者如果语法总是像你所显示的行一样简单,只需将其作为文本一次处理一行,并使用split提取键和值。

62lalag4

62lalag42#

假设您的文件名为dict.ymlinput.csv
您可以通过以下命令将yaml文件转换为字典:

import yaml

with open('dict.yaml', 'r') as file:
    trans_dict = yaml.safe_load(file)

这应该给予你

>>> trans_dict

{'ད་གདོད': 'ད་གཟོད་དང་དོན་འདྲ།',
 'ད་ཆུ': 'དངུལ་ཆུ་ཡི་མིང་གཞན།',
 'ད་ཕྲུག': 'དྭ་ཕྲུག་གི་འབྲི་ཚུལ་གཞན།',
 'ད་བེར': 'སྒྲིབ་བྱེད་དང་རླུང་འགོག་བྱེད་ཀྱི་གླེགས་བུ་ལེབ་མོའི་མིང་།',
 'ད་མེ་དུམ་མེ': 'དམ་དུམ་ལ་ལྟོས།'}

然后,您可以遍历CSV中的行,并使用字典获取定义:

outputs = []
with open('text.txt', 'r') as file:
    for line in file:
        term = line.strip()
        definition = trans_dict.get(term.strip())
        outputs.append(
            term if definition is None 
            else f"{term} {definition}"
        )

在这里,您的outputs变量应该包含['ད་ཆུ དངུལ་ཆུ་ཡི་མིང་གཞན།', 'ད་གདོད ད་གཟོད་དང་དོན་འདྲ།']

with open('output.txt', 'w') as file:
    file.write('\n'.join(outputs))

如果CSV的每一行都有更多的标记(从你的帖子中看不清楚),你可以在一行中迭代这些标记,但是你基本上可以应用相同的方法。

eiee3dmh

eiee3dmh3#

我想到的最简单的解决方案是遍历YAML文件中的所有行,并检查单词是否在CSV文件中:

YAML_LINES = "ད་གདོད: ད་གཟོད་དང་དོན་འདྲ།\nད་ཆུ: དངུལ་ཆུ་ཡི་མིང་གཞན\nད་ཕྲུག: དྭ་ཕྲུག་གི་འབྲི་ཚུལ་གཞན\nད་བེར: སྒྲིབ་བྱེད་དང་རླུང་འགོག་བྱེད་ཀྱི་གླེགས་བུ་ལེབ་མོའི་མིང་།\nད་མེ་དུམ་མེ: དམ་དུམ་ལ་ལྟོས།".split("\n")
CSV_LINES = "ད་ཆུ\nད་གདོད".split("\n")

for line in YAML_LINES:
    word, meaning = line.split(": ")

    if word in CSV_LINES:
        output = word + " " + meaning
        print(output)

YAML_LINESCSV_LINES列表只是提供了一个简单的例子。

相关问题