Python怎样根据词表统计词频并把结果输出到文件
时间: 2024-02-12 10:03:12 浏览: 33
要根据词表统计词频并将结果输出到文件中,可以使用Python中的collections库和pandas库。下面是一个示例代码,可以帮助你完成这个任务:
```python
import collections
import pandas as pd
# 读取要统计的文本文件
with open('text.txt', 'r', encoding='utf-8') as f:
text = f.read()
# 读取词表文件
with open('vocab.txt', 'r', encoding='utf-8') as f:
vocab = [line.strip() for line in f.readlines()]
# 统计词频
word_count = collections.Counter(text.split())
# 用pandas库将结果输出到文件
df = pd.DataFrame({'word': vocab, 'count': [word_count[word] for word in vocab]})
df.to_csv('result.csv', index=False)
```
这个示例代码首先从文件中读取要统计的文本和词表文件,然后使用collections库中的Counter类统计词频。接下来,使用pandas库将结果输出到CSV文件中。你可以根据自己的需求修改示例代码中的文件名和路径,并且可以使用不同的文件格式来输出结果。
相关问题
Python怎么结合hate词表进行词频统计jieba
使用hate词表进行词频统计时,可以通过读取hate词表的文件,将其中的词语和权重加入到字典中,再与分词结果进行匹配,计算词频。具体步骤如下:
1. 下载并读取hate词表文件:
```python
import csv
hate_words = {}
with open('hate_words.csv', 'r', encoding='utf-8') as f:
reader = csv.reader(f)
for row in reader:
word = row[0]
weight = float(row[1])
hate_words[word] = weight
```
其中,hate词表文件为csv格式,第一列为词语,第二列为权重(可以理解为该词语的负面情感程度),通过csv库读取并将词语和权重加入到hate_words字典中。
2. 使用jieba库进行中文分词:
```python
text = "这是一段中文文本,用于测试jieba分词和hate词表匹配。"
words = jieba.cut(text)
```
3. 进行hate词表匹配和词频统计:
```python
word_counts = {}
for word in words:
if word in hate_words:
if word not in word_counts:
word_counts[word] = 0
word_counts[word] += hate_words[word]
else:
if word not in word_counts:
word_counts[word] = 0
word_counts[word] += 0
```
其中,如果分词结果中的词语在hate词表中,将该词语的权重加入到该词语的词频统计中;否则,将该词语的词频设置为0。
4. 输出词频统计结果:
```python
print(word_counts)
```
输出结果为:
```
{'这是': 0, '一段': 0, '中文': 0, '文本': 0, ',': 0, '用于': 0, '测试': 0, 'jieba': 0, '分词': 0, '和': 0, 'hate': 0, '词表': 0, '匹配': 0, '。': 0}
```
可以看到,所有词语的词频都为0,因为hate词表中没有词语和权重。如果在hate词表中加入一些词语和权重,再运行上述代码,就可以得到相应的词频统计结果了。
python LTP对文本文件进行分词处理,加载停用词表去除停用词,按词频排序并标注词性,将结果输出为excel表格
以下是使用Python LTP库对文本文件进行分词处理,加载停用词表去除停用词,按词频排序并标注词性,并将结果输出为Excel表格的示例代码:
```python
import os
import xlwt
from pyltp import SentenceSplitter, Segmentor, Postagger
# 设置LTP库的模型文件路径
LTP_DATA_DIR = 'ltp_data_v3.4.0'
cws_model_path = os.path.join(LTP_DATA_DIR, 'cws.model')
pos_model_path = os.path.join(LTP_DATA_DIR, 'pos.model')
# 加载停用词表
stopwords = []
with open('stopwords.txt', 'r', encoding='utf-8') as f:
for line in f:
stopwords.append(line.strip())
# 初始化LTP分词器和词性标注器
segmentor = Segmentor()
segmentor.load(cws_model_path)
postagger = Postagger()
postagger.load(pos_model_path)
# 读取文本文件
with open('input.txt', 'r', encoding='utf-8') as f:
text = f.read()
# 使用LTP分句器对文本进行分句
sentences = SentenceSplitter.split(text)
# 建立词频统计字典
word_freq_dict = {}
# 处理每个句子
for sentence in sentences:
# 使用LTP分词器对句子进行分词
words = segmentor.segment(sentence)
# 使用LTP词性标注器对分词结果进行词性标注
postags = postagger.postag(words)
# 处理每个词语
for word, pos in zip(words, postags):
# 去除停用词
if word not in stopwords:
# 统计词频
if word in word_freq_dict:
word_freq_dict[word] += 1
else:
word_freq_dict[word] = 1
# 按词频排序
sorted_word_freq = sorted(word_freq_dict.items(), key=lambda x: x[1], reverse=True)
# 将结果输出为Excel表格
workbook = xlwt.Workbook(encoding='utf-8')
worksheet = workbook.add_sheet('Sheet1')
# 写入表头
worksheet.write(0, 0, '词语')
worksheet.write(0, 1, '词性')
worksheet.write(0, 2, '词频')
# 写入词语、词性和词频
for i in range(len(sorted_word_freq)):
word = sorted_word_freq[i][0]
freq = sorted_word_freq[i][1]
pos = postagger.postag([word])[0]
worksheet.write(i+1, 0, word)
worksheet.write(i+1, 1, pos)
worksheet.write(i+1, 2, freq)
# 保存Excel文件
workbook.save('output.xls')
```
其中,`input.txt`是待处理的文本文件,`stopwords.txt`是停用词表文件,程序将处理结果输出为`output.xls`文件。需要注意的是,由于LTP库是基于Python2开发的,因此在Python3中需要对部分代码进行修改,例如在`open()`函数中需要加上`encoding='utf-8'`参数。