从xlsx文件里读取一列评论,通过jieba库分词,一个字的不要,统计结果
时间: 2024-04-30 18:22:59 浏览: 106
以下是一个Python程序,可以读取xlsx文件中的某一列评论,使用jieba库进行分词,过滤掉一个字的词语,并统计词频:
```python
import openpyxl
import jieba
# 打开xlsx文件
wb = openpyxl.load_workbook('comments.xlsx')
# 选择第一个工作表
ws = wb.worksheets[0]
# 读取第一列评论
comments = [cell.value for cell in ws['A']]
# 分词并统计词频
word_count = {}
for comment in comments:
words = jieba.cut(comment)
for word in words:
if len(word) > 1:
word_count[word] = word_count.get(word, 0) + 1
# 输出词频统计结果
for word, count in word_count.items():
print(word, count)
```
这个程序首先使用openpyxl库读取xlsx文件中的第一列评论,然后使用jieba库进行分词。在分词的过程中,我们过滤掉了长度为1的词语。最后,我们使用一个字典来统计每个词语出现的次数,并输出结果。
相关问题
从xlsx文件里读取一列评论,通过jieba库分词,一个字的不要,统计结果,按从大到小输出
以下是一个Python代码示例,实现了从xlsx文件中读取一列评论,使用jieba库进行分词,并统计分词结果,最终按照词频从大到小进行输出。
```python
import jieba
import openpyxl
from collections import Counter
# 打开xlsx文件
wb = openpyxl.load_workbook('comments.xlsx')
ws = wb.active
# 读取评论列,并进行分词
comments = []
for cell in ws['A']:
if isinstance(cell.value, str):
seg_list = jieba.cut(cell.value)
for seg in seg_list:
if len(seg) > 1:
comments.append(seg)
# 统计分词结果,按照词频从大到小排序
counter = Counter(comments)
result = counter.most_common()
# 输出结果
for word, freq in result:
print(f'{word}: {freq}')
```
在上述代码中,首先使用openpyxl库打开xlsx文件,并读取评论列。然后使用jieba库对每个评论进行分词,并将分词结果添加到comments列表中。接着使用collections库中的Counter类对comments列表进行统计,得到每个词出现的频率,最终使用most_common()方法按照词频从大到小排序。最后,使用for循环输出结果。
python+excel+jieba分析一个具有多个列的文件,读取.xlsx文件,可以选择对文件内任意一列或多列的单元格内字符串相似度,并且输出相似度多少,对相似度大于0.75的新增一列进行标记,并输出成一个新的文件,用面向对象的方法来写
好的,我来根据你的要求给你提供一个面向对象的解决方案。
首先,我们需要安装两个库:`openpyxl`和`jieba`,你可以使用以下命令安装:
```
pip install openpyxl jieba
```
然后,我们需要创建一个`ExcelAnalyzer`类来处理Excel文件:
```python
import openpyxl
import jieba
class ExcelAnalyzer:
def __init__(self, filename):
self.filename = filename
self.wb = openpyxl.load_workbook(filename)
self.sheets = self.wb.sheetnames
self.results = []
def analyze(self, sheet_name, col_names, threshold):
sheet = self.wb[sheet_name]
rows = sheet.iter_rows(min_row=2, values_only=True)
for row in rows:
values = []
for col_name in col_names:
cell = sheet[col_name + str(row[0])]
values.append(cell.value)
sim = self._calculate_sim(*values)
if sim >= threshold:
self.results.append((sheet_name, row[0], sim))
return self.results
def _calculate_sim(self, *values):
words = [jieba.lcut(str(value)) for value in values]
all_words = set([word for words in words for word in words])
vecs = []
for word in all_words:
vec = []
for words in words:
vec.append(words.count(word))
vecs.append(vec)
sim = self._cosine_similarity(vecs[0], vecs[1])
return sim
def _cosine_similarity(self, vec1, vec2):
numerator = sum([vec1[i] * vec2[i] for i in range(len(vec1))])
denominator = self._magnitude(vec1) * self._magnitude(vec2)
if denominator == 0:
return 0
else:
return numerator / denominator
def _magnitude(self, vec):
return (sum([x**2 for x in vec]))**0.5
def mark_similar(self, threshold, output_filename):
for sheet_name, row_num, sim in self.results:
sheet = self.wb[sheet_name]
cell = sheet.cell(row=row_num, column=len(col_names)+1)
if sim >= threshold:
cell.value = "similar"
self.wb.save(output_filename)
```
这个类有四个方法:
- `__init__`方法用于初始化Excel文件的基本信息。
- `analyze`方法用于分析指定表单的多个列,计算相似度,并返回大于阈值的结果。
- `_calculate_sim`方法用于计算两个字符串列表的相似度。
- `mark_similar`方法用于对大于阈值的结果进行标记,并输出到新的Excel文件中。
我们使用了`jieba`库来对文本进行分词,使用了余弦相似度来计算相似度。
接下来,我们可以使用这个类来分析Excel文件并输出结果:
```python
analyzer = ExcelAnalyzer("input.xlsx")
results = analyzer.analyze("Sheet1", ["A", "B"], 0.75)
print(results)
analyzer.mark_similar(0.75, "output.xlsx")
```
这个代码会输出大于阈值的结果,并把大于阈值的结果在原始Excel文件中标记出来,并输出到`output.xlsx`文件中。
希望这个代码对你有所帮助!
阅读全文