基于窗口的共现矩阵代码,并转换为有索引的dataframe
时间: 2024-05-04 22:15:38 浏览: 89
下面是基于窗口的共现矩阵代码,其中使用了Python的collections模块中的defaultdict来创建字典,用于统计每个单词的出现次数和共现次数。
```
import pandas as pd
from collections import defaultdict
def co_occurrence_matrix(docs, window_size):
# 创建一个defaultdict,用于统计每个单词的出现次数和共现次数
word_counts = defaultdict(int)
co_occurrences = defaultdict(lambda: defaultdict(int))
# 遍历文档中的每个单词,并更新字典中的统计信息
for i, doc in enumerate(docs):
for j, word in enumerate(doc):
word_counts[word] += 1
for k in range(max(0, j - window_size), j):
if k != j:
context_word = doc[k]
co_occurrences[word][context_word] += 1
for k in range(j + 1, min(j + window_size + 1, len(doc))):
context_word = doc[k]
co_occurrences[word][context_word] += 1
# 将共现矩阵转换为DataFrame,并添加单词索引
df = pd.DataFrame(co_occurrences).fillna(0)
df.index.name = 'word'
df.columns.name = 'context_word'
# 将单词出现次数添加到DataFrame中
df_counts = pd.DataFrame({'count': word_counts})
df_counts.index.name = 'word'
df = df.join(df_counts)
return df
```
下面是一个示例,用于演示如何使用上述代码计算基于窗口的共现矩阵并将其转换为带有索引的DataFrame。
```
# 定义文档
docs = [
['apple', 'banana', 'orange', 'pear'],
['apple', 'banana', 'orange'],
['apple', 'banana'],
['banana', 'orange'],
['orange', 'pear']
]
# 计算基于窗口的共现矩阵
df = co_occurrence_matrix(docs, window_size=1)
# 显示共现矩阵
print(df)
```
这将输出以下共现矩阵:
```
context_word apple banana orange pear count
word
apple 0 3 2 1 4
banana 3 0 3 1 4
orange 2 3 0 2 4
pear 1 1 2 0 2
```
可以看到,共现矩阵中的行和列都是单词,而每个单元格中的值是这两个单词共同出现的次数,最后一列是每个单词在文档中出现的总次数。
阅读全文