Python 查找单词共现
这就是我的问题。我有一个非常大的csv文件,有3列。第一列是唯一ID。第二列是一个字符串,它是一个英语句子。第三列是描述第二列中句子的一串单词标记(通常为3个标记,最多5个)。这里有一个例子Python 查找单词共现,python,word-count,Python,Word Count,这就是我的问题。我有一个非常大的csv文件,有3列。第一列是唯一ID。第二列是一个字符串,它是一个英语句子。第三列是描述第二列中句子的一串单词标记(通常为3个标记,最多5个)。这里有一个例子 id | sentence | tags 1 | "people walk dogs in the park" | "pet park health" 2 | "I am allergic to dogs" | "allergies health
id | sentence | tags
1 | "people walk dogs in the park" | "pet park health"
2 | "I am allergic to dogs" | "allergies health"
我想做的是找到所有的标记词和句子中的词的共现。因此,上述示例所需的输出如下所示
("walk","pet"),1
("health","dogs"),2
("allergies","dogs"),1
etc...
其中第一个条目是单词对(第一个来自句子,第二个是标记词),然后是它们同时出现的次数
我想知道最好的方法是什么。我在想,也许我可以设计一个python字典,其中键是一个标记词,值是该标记词出现的ID集。我可以对所有句子中出现的所有单词做同样的处理(在删除停止词之后)。然后,我可以计算两个词的每一个组合在两个集合交叉处的ID数,这将给出它们同时出现的次数
然而,这似乎需要很长时间(巨大的csv文件!)。我也可能会耗尽内存。有谁能想出更好的方法来做这件事吗。也许将文件导入数据库并运行某种查询?我认为使用和很容易:
至于处理大型文件,我认为您可以尝试某种map reduce—逐行读取csv并将所有组合保存到另一个文件中:
with open(r"data.csv") as r, open(r"data1.csv", "w") as w:
rdr = csv.reader(r, quotechar='"', delimiter='|')
for _, a, b in rdr:
for x, y in product(a.split(), b.split()):
w.write("{},{}\n".format(x, y))
下一步是读取第二个文件并创建计数器:
with open(r"c:\temp\data1.csv") as r:
for l in r:
c[l.rstrip('\n')] += 1
更新我开始了解Python是否有任何map reduce框架。这里是谷歌的第一个链接-。实际上,它有一个演示如何创建和运行一个计算单词的迪斯科工作的工具-我认为它可能对您有用(至少我会去尝试一下:)。还有一个-。非常感谢!我要试试这个。只有一个问题。当你说MapReduce时,你是说使用多个集群吗?因为我没有访问权限。@user1893354我也不是大型集群的大师,也许我不应该使用map reduce这个词。我的意思是更像流程处理。若并没有足够的内存来加载文件中的所有数据,可以逐行加载,将元组保存到文件中,然后运行另一个程序来计算元组。我认为将这些分割的数据加载到SQL中并在那里计算频率(您可以构建索引以加快处理速度)也很有用,这正是我的想法。我只是想澄清一下。谢谢
with open(r"c:\temp\data1.csv") as r:
for l in r:
c[l.rstrip('\n')] += 1