用Python统计词频

123456人性尴尬啊哈147852哈哈不好看123456啊哈147852哈哈147852嗯嗯二刷147852略略略人性123456尴尬147963人性极端123456啊... 123456 人性 尴尬 啊哈
147852 哈哈 不好看
123456 啊哈
147852 哈哈
147852 嗯嗯 二刷
147852 略略略 人性
123456 尴尬
147963 人性 极端
123456 啊哈
147963 不好看

统计每个标签在多少本图书中出现过,也就是统计每个标签对应的图书编号的
数量。如果一个词汇在同一个图书编号中出现N次,也只能记作1次,因为图书
编号只有一个。所以上面的数据经过处理后结果应该是
(如果能递增或递减排序就更好了,不实现也没事)

人性 3
尴尬 1
啊哈 1
哈哈 1
不好看 2
嗯嗯 1
二刷 1
略略略 1
极端 1
跪求Python大神帮忙
展开
 我来答
Storm_duck
2019-07-16 · TA获得超过1629个赞
知道小有建树答主
回答量:1104
采纳率:82%
帮助的人:451万
展开全部
def statistics(astr):
# astr.replace("\n", "")
slist = list(astr.split("\t"))
alist = []
[alist.append(i) for i in slist if i not in alist]
alist[-1] = alist[-1].replace("\n", "")
return alist

if __name__ == "__main__":
code_doc = {}
with open("test_data.txt", "r", encoding='utf-8') as fs:
for ln in fs.readlines():
l = statistics(ln)
for t in l:
if t not in code_doc:
code_doc.setdefault(t, 1)
else:
code_doc[t] += 1

for keys in code_doc.keys():
print(keys + ' ' + str(code_doc[keys]))
更多追问追答
追问

是txt文件,给您截图可以嘛?上传不了

追答
def statistics(astr):
# astr.replace("\n", "")
slist = list(astr.split("\t"))
alist = []
[alist.append(i) for i in slist if i not in alist]
alist[-1] = alist[-1].replace("\n", "")
return alist

if __name__ == "__main__":
code_doc = {}
with open("test_data.txt", "r", encoding='utf-8') as fs:
for ln in fs.readlines():
l = statistics(ln)
for t in l:
if t not in code_doc:
code_doc.setdefault(t, 1)
else:
code_doc[t] += 1

for keys in code_doc.keys():
print(keys + ' ' + str(code_doc[keys]))
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jjdsjeff
2019-07-16 · TA获得超过2052个赞
知道大有可为答主
回答量:2468
采纳率:72%
帮助的人:610万
展开全部

import pandas as pd

a='''123456 人性 尴尬 啊哈

147852 哈哈 不好看

123456 啊哈

147852 哈哈

147852 嗯嗯 二刷

147852 略略略 人性

123456 尴尬

147963 人性 极端

123456 啊哈

147963 不好看'''

arr=[[x] for x in a.split('\n')]

df=pd.DataFrame(arr,)

df1=df[0].str.split('\t',expand=True);df1.columns='id a b c'.split()

df2=df1.set_index('id').stack().reset_index()

df2.drop_duplicates(inplace=True)

print(df2[0].value_counts())

##         源文件txt.txt,输出文件txt_out.txt

import pandas as pd

df=pd.read_csv(r'd:/txt.txt',encoding='gbk',header=None)

df1=df[0].str.split('\t',expand=True);df1.columns='id a b c'.split()

df2=df1.set_index('id').stack().reset_index()

df2.drop_duplicates(inplace=True)

df2[0].value_counts().to_csv(r'd:/txt_out.txt',header=None,sep='\t')

追问
您好,非常感谢。代码很好用,只是当每一行的标签过多(远远超过3个标签)以及需要处理的数据过大(需要处理1000多万行)时,就会显示memory error(我看了是可能是内存不够的问题)所以想请问还有更适合大规模数据的版本吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式