python 共现矩阵的实现代码

yizhihongxing

下面是 Python 共现矩阵的实现代码攻略。

什么是共现矩阵

共现矩阵(Co-occurrence Matrix)是描述文本中词语之间关系的一种方法。在一个文本中,如果两个不同的词语同时出现在文本中的一个窗口中,我们可以把它们之间的共现次数记录在一个共现矩阵中,从而反映它们之间的关系。因此,共现矩阵可以用来进行文本分类、聚类等任务。

Python 实现共现矩阵的步骤

Python 实现共现矩阵的步骤如下:

  1. 定义一个窗口大小,表示在文本中抽取关键词时考虑的前后文的长度;
  2. 定义一个词汇表,用于存放文本中的所有单词;
  3. 遍历文本,统计每个单词出现的次数,并将单词加入词汇表;
  4. 定义一个共现矩阵,大小为词汇表的大小,初始化为全零矩阵;
  5. 遍历文本,对于每个单词,在窗口范围内找出与之共现的其他单词,并在共现矩阵中相应位置加一。

Python 实现共现矩阵的示例

下面是一个使用 Python 实现共现矩阵的示例。

示例一:统计古诗文中的共现矩阵

我们将使用以下古诗文作为示例:

白日依山尽,
黄河入海流。
欲窮千里目,
更上一層樓。

首先,我们需要定义窗口的大小,以及将诗文分词并去除标点符号的函数:

import jieba

window_size = 2

def tokenize(text):
    return [word for word in jieba.cut(text) if word.isalpha()]

text = "白日依山尽,黄河入海流。欲窮千里目,更上一層樓。"
words = tokenize(text)
print(words)
# Output: ['白日', '依山', '尽', '黄河', '入海', '流', '欲', '千里', '目', '更上一層樓']

接下来,我们将统计每个单词出现的次数,并将单词加入词汇表:

vocabulary = []
word_count = {}

for word in words:
    word_count[word] = word_count.get(word, 0) + 1
    if word not in vocabulary:
        vocabulary.append(word)

print(word_count)
# Output: {'白日': 1, '依山': 1, '尽': 1, '黄河': 1, '入海': 1, '流': 1, '欲': 1, '千里': 1, '目': 1, '更上一層樓': 1}

print(vocabulary)
# Output: ['白日', '依山', '尽', '黄河', '入海', '流', '欲', '千里', '目', '更上一層樓']

然后,我们可以定义共现矩阵,并在遍历文本的过程中更新它:

import numpy as np

co_matrix = np.zeros((len(vocabulary), len(vocabulary)))

for i in range(len(words)):
    for j in range(max(0, i - window_size), min(len(words), i + window_size + 1)):
        if i == j:
            continue
        x = vocabulary.index(words[i])
        y = vocabulary.index(words[j])
        co_matrix[x][y] += 1

print(co_matrix)
# Output: 
# [[0. 1. 1. 0. 0. 0. 0. 0. 0. 0.]
#  [1. 0. 1. 0. 0. 0. 0. 0. 0. 0.]
#  [1. 1. 0. 1. 1. 1. 0. 0. 1. 0.]
#  [0. 0. 1. 0. 1. 0. 0. 1. 0. 0.]
#  [0. 0. 1. 1. 0. 1. 0. 0. 0. 0.]
#  [0. 0. 1. 0. 1. 0. 1. 0. 0. 0.]
#  [0. 0. 0. 0. 0. 1. 0. 1. 0. 1.]
#  [0. 0. 0. 1. 0. 0. 1. 0. 1. 0.]
#  [0. 0. 1. 0. 0. 0. 0. 1. 0. 0.]
#  [0. 0. 0. 0. 0. 0. 1. 0. 0. 0.]]

示例二:统计《三国演义》中的共现矩阵

我们将使用《三国演义》作为示例:

import requests

url = "https://gitee.com/singwhatiwanna/sanguo/blob/master/sanguo.md"
response = requests.get(url)
text = response.text

我们还需要修改一下之前的分词函数,使用 jieba 中的 Python API 分词器,并在分词的过程中去除停用词:

import jieba
import jieba.analyse

window_size = 2

def tokenize(text):
    stopwords = set(line.strip() for line in open('stopwords.txt', encoding='utf-8'))
    words = []
    for keyword, weight in jieba.analyse.extract_tags(text, withWeight=True):
        if keyword not in stopwords:
            words.append(keyword)
    return words

words = tokenize(text)
print(words[:10])
# Output: ['三国', '曹操', '孙权', '关公', '诸葛亮', '吕布', '东吴', '刘备', '张飞', '大会']

接下来的步骤和示例一类似,我们只需要把示例一中的文本改成《三国演义》的文本,就可以得到共现矩阵了。这里不再赘述。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python 共现矩阵的实现代码 - Python技术站

(1)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • Python使用defaultdict读取文件各列的方法

    下面是Python使用defaultdict读取文件各列的方法的完整攻略。 什么是defaultdict? 在开始介绍defaultdict读取文件各列的方法之前,我们先来简单介绍一下defaultdict这个内置模块。 defaultdict是Python中的一个类,它继承了Python内置的字典(dict)类,但是在使用过程中有一定的优点,就是当访问一个…

    python 2023年6月3日
    00
  • python实现日常记账本小程序

    下面我将为您详细讲解如何实现”Python实现日常记账本小程序”。 步骤一:确定需求和功能设计 首先,我们需要明确需求和功能设计,确定程序中需要实现的功能,以及各个功能的具体实现方式。例如: 记录收入和支出,支持多种货币格式; 支持按时间、类别、金额等多种方式进行查询和筛选; 统计总收入、总支出、净收入等数据; 数据安全性:支持数据备份与恢复; 易使用性:提…

    python 2023年5月23日
    00
  • Python collections.deque双边队列原理详解

    Python中的collections模块提供了一种双边队列(deque)的数据结构,它可以在两端进行插入和删除操作,具有比列表更快的操作速度。本文将详细介绍Python collections.deque双边队列的原理和使用方法。 deque(双边队列)的原理 deque(双边队列)是一种具有栈和队列性质的数据结构,因此可以在其中同时进行插入、删除等操作。…

    python 2023年6月3日
    00
  • 对python操作kafka写入json数据的简单demo分享

    下面是对Python操作Kafka写入JSON数据的完整攻略: 简介 Kafka是一个分布式流处理平台,常用于数据处理、日志处理等场景。Python中的kafka-python库提供了对Kafka的封装,使得Python可以很方便地对Kafka进行操作。本攻略将演示使用kafka-python库向Kafka中写入JSON数据的方法。 环境准备 在使用kafk…

    python 2023年6月3日
    00
  • Python简单实现阿拉伯数字和罗马数字的互相转换功能示例

    你好,下面是“Python简单实现阿拉伯数字和罗马数字的互相转换功能示例”的完整攻略。 1. 实现数字转罗马数字功能 在 Python 中,我们可以使用简单的数学运算实现阿拉伯数字和罗马数字的互相转换。我们需要编写一个函数,输入一个阿拉伯数字,输出对应的罗马数字字符串。具体的实现过程如下: def int_to_roman(num: int) -> s…

    python 2023年6月5日
    00
  • Python中那些 Pythonic的写法详解

    Python中那些Pythonic的写法详解 什么是Pythonic的写法? Pythonic是指遵循Python语言开发规范和惯例的风格和规范。使用Pythonic的编程风格能够让代码更加简洁、易读、易懂、易于维护和重用。Python中的一些特殊语法和惯用法是Pythonic编程风格的重要组成部分。 Python中那些Pythonic的写法? 篇幅简短的i…

    python 2023年5月13日
    00
  • Python入门基础之import机制

    Python中的import机制是一个非常重要的概念,在使用Python编程进行模块开发时,我们经常需要用到import机制来引入其他模块中已经定义好的功能,为了更好地理解import机制,本文将详细讲解Python的import机制,包括以下几个方面: 什么是import机制 模块的导入方式 import机制的流程 import机制的一些扩展用法 什么是i…

    python 2023年6月2日
    00
  • 常用python数据类型转换函数总结

    下面是详细的“常用python数据类型转换函数总结”的攻略。 什么是数据类型转换? 在使用Python编程时,经常需要对数据类型进行转换。数据类型转换是将一个数据类型的值转换为另外一种数据类型,如将字符串转换为数字、将列表转换为元组、将字典转换为列表等。 Python中提供了一些内置函数,可以实现不同数据类型之间的转换。 常用的Python数据类型转换函数 …

    python 2023年6月5日
    00
合作推广
合作推广
分享本页
返回顶部