繁体   English   中英

拆分CSV后应用nltk.FreqDist

[英]Applying nltk.FreqDist after splitting a CSV

我一直在尝试使用| 作为分隔符和\\n作为新行。
a | b | cc | e | f

我一直在尝试使用rec[0].split('|')拆分集合并应用nltk.FreqDist(rec)

这是我的源代码

import nltk
import csv
from nltk.util import ngrams

with open('CG_Attribute.csv', 'r') as f:
    for row in f:
        splitSet = row.split('|')
        for rec in splitSet:
            # token = nltk.word_tokenize(rec)
            result = nltk.FreqDist(rec)
            print(result)

我得到的输出如下

<FreqDist with 14 samples and 22 outcomes>
<FreqDist with 8 samples and 9 outcomes>
<FreqDist with 1 samples and 1 outcomes>
<FreqDist with 26 samples and 44 outcomes>
<FreqDist with 6 samples and 8 outcomes>

我期望的是

[('a',1),('b',1),('c',2),('e',1),('f',1)]

谁能指出我在哪里搞砸? 任何建议将有所帮助:)

PS-我什至使用过csv ,但没有运气

先生,您似乎一路上缺少了几个步骤。

当您遍历文件中的行,并用“ |”分隔时,结果实际上是一系列列表:

row1: ["a ", " b ", " c "]
row2: ["c ", " e ", " f "]

我想您想要的(如果我错了,请纠正我)是将这些列表拼接成一个大列表,以便您可以计算整个文件中项目的频率。 您可以使用以下类似方法执行此操作:

with open('CG_Attribute.csv') as f:
    tokens = [token for row in f for token in row.split("|")]

现在您将所有单词都放在一个列表中,接下来可以计算它们的出现频率了。 根据您描述的输出数据,我实际上认为nltk.FreqDist过头了,并且您可以使用collections.Counter很好。

from collections import Counter
token_counts = Counter(tokens)
# if using python 2
token_count_tuples = token_counts.items()

请注意,由于FreqDist继承自Counter ,因此您可以在上面的代码段中轻松替换它,以防万一您仍然真正想要使用它。

如果您使用的是Python 3, Counter.items()返回一个迭代器,而不是列表,因此您必须对其进行显式转换:

token_count_tuples = list(token_counts.items())

中提琴,您将令牌与它们各自的数量配对!

最后一点:您可能必须在令牌上调用str.strip() ,因为我不认为用“ |”分割 将删除单词和定界符之间的空格。 但这取决于您的实际数据是什么样子以及是否要考虑空格。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM