我有一个数据框,是通过组合使用PyPDF2导入的多个PDF创建的。框架看起来像这样:
combined_df
Index Title Page
1 Title 1 Text from page 1
2 nan Text from page 2
3 nan Text from page 3
4 Title 2 Text from page 1
5 nan Text from page 2
“页面”列上的行包含PDF每页中的所有文本,因此可能会很大。我正在尝试使用“页面”列并总结三元组。我正在使用以下代码,但是成功提取了单个字母,而不是单词。
combined_df['page'] = combined_df['page'].astype(str)
trigram_measures = nltk.collocations.BigramAssocMeasures()
finder = BigramCollocationFinder.from_documents(combined_df['page'])
finder.nbest(trigram_measures.pmi, 100)
s = pd.Series(combined_df['page'])
ngram_list = [pair for row in s for pair in ngrams(row, 3)]
counts = Counter(ngram_list).most_common()
trigram_ df = pd.DataFrame.from_records(counts, columns=['gram', 'count'])
这给了我以下输出:
Index Gram Count
0 (' ', 't', 'h') 17793
1 ('t', 'h', 'e') 15882
2 ('h', 'e', ' ') 11255
3 ('i', 'n', 'g') 8846
4 ('e', 'n', 't') 8688
5 (' ', 'i', 'n') 8665
我怀疑这很简单,导致循环无法识别单词之间的空格,有人可以帮忙吗?
更新代码
combined_df['page'] = combined_df['page'].astype(str)
trigram_measures = nltk.collocations.BigramAssocMeasures()
finder = BigramCollocationFinder.from_documents(combined_df['page'])
finder.nbest(trigram_measures.pmi, 100)
s = pd.Series(combined_df['page'])
trigram_df = s.apply(lambda x: Counter(ngrams(x.split(), 3)).most_common())
答案 0 :(得分:1)
您必须Web Deployment Assembly
字符串才能将Project A
变成split
。否则strings
将使用输入字符串作为查找3克的可迭代项:
list
从这个玩具示例中:
ngrams
更新
要在整列上找到最常见的3克,您可以使用:
s.apply(lambda x: Counter(ngrams(x.split(), 3)).most_common())