python - 使用 python 比较两个 csv 文件中的第一列并打印匹配项

标签 python csv match nltk

我有两个 csv 文件,每个文件都包含如下所示的 ngram:

drinks while strutting,4,1.435486010883783160220299732E-8
and since that,6,4.306458032651349480660899195E-8
the state face,3,2.153229016325674740330449597E-8

它是一个三词短语,后跟一个频率数字,然后是一个相对频率数字。

我想编写一个脚本来查找两个 csv 文件中的 ngram,划分它们的相对频率,并将它们打印到新的 csv 文件中。我希望只要三个单词的短语与另一个文件中的三个单词的短语匹配,它就能找到匹配项,然后将第一个 csv 文件中该短语的相对频率除以第二个 csv 文件中同一短语的相对频率。然后我想将短语和两个相对频率的划分打印到一个新的 csv 文件中。

以下是我所了解的。我的脚本正在比较行,但只有当整行(包括频率和相对频率)完全匹配时才能找到匹配项。我意识到这是因为我正在寻找两个完整集合之间的交集,但我不知道如何以不同的方式做到这一点。请原谅我;我是编码新手。你能给我的任何帮助让我更接近一点,这将是一个很大的帮助。

import csv
import io 

alist, blist = [], []

with open("ngrams.csv", "rb") as fileA:
    reader = csv.reader(fileA, delimiter=',')
    for row in reader:
        alist.append(row)
with open("ngramstest.csv", "rb") as fileB:
    reader = csv.reader(fileB, delimiter=',')
    for row in reader:
        blist.append(row)

first_set = set(map(tuple, alist))
secnd_set = set(map(tuple, blist))

matches = set(first_set).intersection(secnd_set)

c = csv.writer(open("matchedngrams.csv", "a"))
c.writerow(matches)

print matches
print len(matches)

最佳答案

无需将 res 转储到新文件中(乏味)。这个想法是第一个元素是短语,另外两个元素是频率。使用 dict 而不是 set 一起进行匹配和映射。

import csv
import io 

alist, blist = [], []

with open("ngrams.csv", "rb") as fileA:
    reader = csv.reader(fileA, delimiter=',')
    for row in reader:
        alist.append(row)
with open("ngramstest.csv", "rb") as fileB:
    reader = csv.reader(fileB, delimiter=',')
    for row in reader:
        blist.append(row)

f_dict = {e[0]:e[1:] for e in alist}
s_dict = {e[0]:e[1:] for e in blist}

res = {}
for k,v in f_dict.items():
    if k in s_dict:
        res[k] = float(v[1])/float(s_dict[k][1])

print(res)

关于python - 使用 python 比较两个 csv 文件中的第一列并打印匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27238089/

相关文章:

python - PyFPDF、HTMLMixin、Python 无法打印 HTML

json - writer.writerow() 未写入正确的列

mysql - SQL批量插入CSV语法错误?

c# - 正则表达式可以匹配交错匹配吗?

javascript - 如何用正则表达式匹配特殊字符/?

python - 初始化 HiddenMarkovModelTrainer 对象

python - 列组合计数,与顺序无关

python - 如何一次写入多个 csv 行?

减少 R 中的列表以匹配另一个列表。

python - 用 numpy 表示我的数据的推荐方法