使用 nltk 的 CSV 中最常见的 ngram
Most frequent ngrams in a CSV using nltk
我有一个包含数百万条推文的 csv 文件。我已经清理了数据,我想找到整个文件中出现频率最高的 2 / 3 / 4 词短语。
我正在将 csv 作为列表导入。重要的是在列表行内生成二元组/三元组。一世。 e.
列表:
'Sally is great'
'Bob is not'
二元组将是
'Sally is'、'is great'、'Bob is'、'is not'
而不是 'great Bob'
(即不应连接行)
代码如下:
#import necessary packages
#read csv
with open("small_sample.csv", 'r') as f:
reader = csv.reader(f, delimiter=',')
dfl = list(reader)
#import ngrams function
from nltk import ngrams
#store bigrams in string_bigrams
string_bigrams=''
n=2
for line in dfl:
string_bigrams += ngrams(str(line).split(),n)
编辑
由于我不能将 += 与生成器对象一起使用,并且将 ngram 转换为字符串不会给出所需的结果,因此我使用 itertools.chain 添加到生成器对象。
更新代码:
for line in dfl:
string_bigrams
=itertools.chain(string_bigrams,ngrams(str(line).split(),n))
但是,此处的输出与“[”相连。
一世。 e.如果列表保存为 ['Sally is great','Bob is not']
string_bigrams returns
("['Sally", 'is')
('is', "great']")
("['Bob", 'is')
('is', "not']")
预期输出为
('Sally', 'is')
('is', 'great')
('Bob', 'is')
('is', 'not')
为什么要附加 []?
("['Sally", 'is')
('is', "great']")
Why are the [] appended?
不仅是括号,还有杂散的引号。这显然来自将 str
应用于列表,新手 Python 程序员经常这样做是为了掩盖错误,而不是弄清楚错误的来源。
它的来源肯定是这样的:您的 "csv file" 实际上没有栏,每行只有一条消息。但是 csv
模块总是 returns 每一行的内容作为一个 list 的列,这意味着变量 line
是一个单元素列表看起来像这样:
['Sally is great']
要解决此问题,请将 string_bigrams
初始化为空 列表 并更改此
string_bigrams += ngrams(str(line).split(),n)
对此:
string_bigrams.extend( ngrams(line[0].split(), n) )
永远永远不要再将 str
应用于列表。
我有一个包含数百万条推文的 csv 文件。我已经清理了数据,我想找到整个文件中出现频率最高的 2 / 3 / 4 词短语。
我正在将 csv 作为列表导入。重要的是在列表行内生成二元组/三元组。一世。 e. 列表: 'Sally is great' 'Bob is not'
二元组将是 'Sally is'、'is great'、'Bob is'、'is not'
而不是 'great Bob' (即不应连接行)
代码如下:
#import necessary packages
#read csv
with open("small_sample.csv", 'r') as f:
reader = csv.reader(f, delimiter=',')
dfl = list(reader)
#import ngrams function
from nltk import ngrams
#store bigrams in string_bigrams
string_bigrams=''
n=2
for line in dfl:
string_bigrams += ngrams(str(line).split(),n)
编辑 由于我不能将 += 与生成器对象一起使用,并且将 ngram 转换为字符串不会给出所需的结果,因此我使用 itertools.chain 添加到生成器对象。
更新代码:
for line in dfl:
string_bigrams
=itertools.chain(string_bigrams,ngrams(str(line).split(),n))
但是,此处的输出与“[”相连。 一世。 e.如果列表保存为 ['Sally is great','Bob is not'] string_bigrams returns
("['Sally", 'is')
('is', "great']")
("['Bob", 'is')
('is', "not']")
预期输出为
('Sally', 'is')
('is', 'great')
('Bob', 'is')
('is', 'not')
为什么要附加 []?
("['Sally", 'is') ('is', "great']")
Why are the [] appended?
不仅是括号,还有杂散的引号。这显然来自将 str
应用于列表,新手 Python 程序员经常这样做是为了掩盖错误,而不是弄清楚错误的来源。
它的来源肯定是这样的:您的 "csv file" 实际上没有栏,每行只有一条消息。但是 csv
模块总是 returns 每一行的内容作为一个 list 的列,这意味着变量 line
是一个单元素列表看起来像这样:
['Sally is great']
要解决此问题,请将 string_bigrams
初始化为空 列表 并更改此
string_bigrams += ngrams(str(line).split(),n)
对此:
string_bigrams.extend( ngrams(line[0].split(), n) )
永远永远不要再将 str
应用于列表。