用python实现以下具体内容:批量读取txt文件,根据停用词词表以及词表使用最大逆向算法进行分词,词表说明了哪些字的组合可以被算作一个词,停用词表说明哪些没有实意的词可以去掉,其中词表和停用词表均为excel文件,并要求去掉标点符号、数字等;之后蒋分词结果以同名文件保存在另一个文件夹里;最后对分词结果的txt文件进行词频统计,将结果也保存在一个新的文件夹里面。
时间: 2024-03-20 19:44:28 浏览: 102
采用python程序设计语言,进行分词,再去掉停用词和标点符号等,生成文档的词典
好的,我来解答你的问题。
首先,需要安装一些依赖库,包括`openpyxl`、`jieba`、`re`、`os`等。可以通过pip命令进行安装:
```
pip install openpyxl
pip install jieba
```
接下来,我们可以先定义一个函数来读取停用词表和词表:
```python
import openpyxl
def read_excel(file_path):
# 读取excel文件
workbook = openpyxl.load_workbook(file_path)
worksheet = workbook.active
# 读取每一行的数据,存放在列表中
data_list = []
for row in worksheet.iter_rows():
row_list = []
for cell in row:
row_list.append(cell.value)
data_list.append(row_list)
return data_list
```
然后,我们可以定义一个函数来对单个txt文件进行分词:
```python
import jieba
import re
def cut_words(file_path, word_table, stop_words):
# 读取txt文件
with open(file_path, 'r', encoding='utf-8') as f:
content = f.read()
# 去除标点符号、数字等
content = re.sub('[^\u4e00-\u9fa5a-zA-Z]+', '', content)
# 最大逆向匹配分词
words_list = []
max_len = max([len(word) for word in word_table])
while content:
max_cut = min(len(content), max_len)
sub_content = content[-max_cut:]
while sub_content not in word_table and len(sub_content) > 1:
max_cut -= 1
sub_content = content[-max_cut:]
words_list.insert(0, sub_content)
content = content[:-max_cut]
# 去除停用词
words_list = [word for word in words_list if word not in stop_words]
return words_list
```
最后,我们可以定义一个函数来批量读取txt文件、分词并统计词频:
```python
def batch_cut_words(input_folder, output_folder, word_table_path, stop_words_path):
# 读取词表和停用词表
word_table = [word[0] for word in read_excel(word_table_path)]
stop_words = set([word[0] for word in read_excel(stop_words_path)])
# 遍历文件夹
for file_name in os.listdir(input_folder):
if file_name.endswith('.txt'):
# 对单个txt文件进行分词
words_list = cut_words(os.path.join(input_folder, file_name), word_table, stop_words)
# 将分词结果保存到同名文件中
with open(os.path.join(output_folder, file_name), 'w', encoding='utf-8') as f:
f.write(' '.join(words_list))
# 统计词频并保存到新的文件中
word_count = {}
for word in words_list:
word_count[word] = word_count.get(word, 0) + 1
with open(os.path.join(output_folder, file_name[:-4] + '_count.txt'), 'w', encoding='utf-8') as f:
for word, count in word_count.items():
f.write(word + '\t' + str(count) + '\n')
```
最后,我们可以调用`batch_cut_words`函数来进行批量处理:
```python
input_folder = 'input_folder'
output_folder = 'output_folder'
word_table_path = 'word_table.xlsx'
stop_words_path = 'stop_words.xlsx'
batch_cut_words(input_folder, output_folder, word_table_path, stop_words_path)
```
这样,就可以批量读取txt文件,根据停用词词表以及词表使用最大逆向算法进行分词,词频统计,并将结果保存在指定文件夹中了。
阅读全文