问题:统计plk文件里面文案的词频(即词出现的频率),然后以 词:词频 的形式作为内容,输出一个文档。
我的代码没有报错,但是连创建的新文档都输出不了,不知道为什么。编写思路在最后。
过程会用到两个函数,一个是用来解析plk文件,并把当中的文案一句句以列表输出。
如下:
#coding:utf8
import os,pickle
def corpus_CCL(dir_path):
for root,dirs,files in os.walk(dir_path):
for name in files:
if name.endswith(r'plk'):
filepath = os.path.join(root,name)#找到文件的路径,下面打开它
sentences = pickle.load(open(filepath,'rb')) #用二进制的方式读取文件,然后load将文本解析为原本的形式,譬如原来是列表,就会解析成列表
for sentence in sentences:
yield sentence #yield就是将for循环每读出的一句输出一句,不会清空前面的。最后效果就是输出一个个列表
l = corpus_CCL(r'D:\Users\DELL\Desktop\testing')
for s in l:
print(s)
效果如下:
[pair('(', 'x'), pair('张', 'q'), pair('学林', 'n'), pair(')', 'x')]
[pair('军垦', 'n'), pair('赞歌', 'v')]
[pair('西藏', 'ns'), pair('日报', 'n'), pair('1', 'x'), pair('9', 'x'), pair('9', 'x'), pair('4', 'x'), pair('0', 'x'), pair('1', 'x'), pair('2', 'x'), pair('1', 'x')]
[pair('米', 'm'), pair('丰', 'a')]
[pair('军垦', 'n'), pair('赞歌', 'v')]
[pair('本报', 'r'), pair('通讯员', 'n'), pair(' ', 'x'), pair(' ', 'x'), pair('米', 'm'), pair('丰', 'a')]
另一个是用来统计词频的,代码和效果如下:
def sentences_word_freg(s):
d = {}
for word in s:
if word in d: #每出现一次,就在value值加一
d[word] += 1
else:
d[word] = 1
return d
l = ['我','想','睡','觉','睡','觉','是','人','生','大','事']
d = sentences_word_freg(l)
for k,v in d.items():
print(k,v)
效果:
我 1
想 1
睡 2
觉 2
是 1
人 1
生 1
大 1
事 1
现在我要把这两段代码组合起来,使得plk文件里面的文案,以 词:词频 的形式输出到一个新的文档。
以下是我的编写思路:
#coding:utf8
import os,pickle
def sentences_word_freg(s):
d = {}
for word in s:
if word in d:
d[word] += 1
else:
d[word] = 1
return d
text = []
def corpus_dic(dir_path):
for root,dirs,files in os.walk(dir_path):
for name in files:
if name.endswith(r'.plk'):
filepath = os.path.join(root,name)
sentences = pickle.load(open(filepath,'rb'))
for sentence in sentences:
yield sentence
text.append(sentence) #以上是第一和第二个函数。这句是想把sentence放到text
for root, dirs, files in os.walk(dir_path): #以下开始创建新的文件
for n in files:
cpf = os.path.join(root,r'out'+n)
with open(cpf,'w',-1,encoding='utf8') as cpfiles:#用只写模式打开这个新建文件,遍历text里面的sentence,把里面的词语挑出来,给他们统计词频。
for s in text:
for w in s:
sentences_word_freg(w)
cpfiles.writelines(' ')
corpus_dic(r'D:\Users\DELL\Desktop\testing')
结果:没报错,但是文档也没成功建立,什么都没发生TVT
C:\ProgramData\Anaconda3\python.exe C:/Users/DELL/PycharmProjects/111/homework/homework7.py
Process finished with exit code 0
请问,为什么会这样呢?
试试下面这个代码:
# coding:utf8
import os
import pickle
def sentences_word_freg(s):
d = {}
for word in s:
if word in d:
d[word] += 1
else:
d[word] = 1
return d
def corpus_dic(dir_path):
for root, dirs, files in os.walk(dir_path):
for name in files:
if name.endswith(r'.plk'):
filepath = os.path.join(root, name)
sentences = pickle.load(open(filepath, 'rb'))
# 创建一个新的文档名,例如:将原始文件名 "example.plk" 更改为 "out_example.txt"
new_filename = "out_" + name[:-4] + ".txt"
new_filepath = os.path.join(root, new_filename)
with open(new_filepath, 'w', encoding='utf8') as cpfiles:
for sentence in sentences:
d = sentences_word_freg([pair[0] for pair in sentence])
for k, v in d.items():
cpfiles.write("{}:{}\n".format(k, v))
cpfiles.write("\n")
corpus_dic(r'D:\Users\DELL\Desktop\testing')