定义三个函数分别是读取文件数据的函数(红楼梦.txt)、读取停用词数据的函数(stopwords.txt)、进行分词并统计词频的函数,要求只统计词的长度大于1且该词不在停用词里的。然后调用该三个函数进行词频统计并把将频率最高的topn个词及其频率数存放在文件result.txt中。
时间: 2023-12-22 07:03:13 浏览: 92
好的,这是一个比较复杂的任务,需要涉及到文件读取、数据处理和文件写入等多个方面的知识。下面是一个可能的实现方案,供您参考。
首先是读取文件数据的函数:
```python
def read_file(filename):
with open(filename, 'r', encoding='utf-8') as f:
text = f.read()
return text
```
这个函数接受一个文件名作为参数,返回文件中的文本内容。注意要使用 utf-8 编码打开文件,否则可能会出现中文乱码的问题。
接下来是读取停用词数据的函数:
```python
def read_stopwords(filename):
with open(filename, 'r', encoding='utf-8') as f:
stopwords = set(line.strip() for line in f)
return stopwords
```
这个函数也接受一个文件名作为参数,返回一个包含停用词的集合。每次读取一行并去掉行末的换行符,然后将其添加到集合中。
最后是进行分词并统计词频的函数:
```python
import jieba
def count_words(text, stopwords):
word_dict = {}
for word in jieba.cut(text):
if len(word) > 1 and word not in stopwords:
if word in word_dict:
word_dict[word] += 1
else:
word_dict[word] = 1
return word_dict
```
这个函数接受两个参数:文件文本内容和停用词集合。它使用 jieba 分词库对文本进行分词,然后对每个词进行长度和停用词判断,如果符合要求就将其添加到词频字典中。最后返回词频字典。
现在我们可以将这三个函数组合起来,完成整个任务:
```python
def main():
text = read_file('红楼梦.txt')
stopwords = read_stopwords('stopwords.txt')
word_dict = count_words(text, stopwords)
topn = 10
with open('result.txt', 'w', encoding='utf-8') as f:
for word, freq in sorted(word_dict.items(), key=lambda x: x[1], reverse=True)[:topn]:
f.write(f'{word}\t{freq}\n')
```
这个主函数调用了前面三个函数,然后将词频字典按照频率从大到小排序,取出前面的 topn 个词,然后将它们和对应的频率数写入文件中。注意要使用制表符分隔词和频率,这样可以方便后续的数据处理。
以上就是一个可能的实现方案,希望能够帮助到您。如果您有任何问题或需要进一步的帮助,请随时提出。
阅读全文