python 共现矩阵的实现代码

下面是 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日

相关文章

  • Python2及Python3如何实现兼容切换

    要实现Python2与Python3的兼容切换,主要需要以下几个步骤: 确定使用的Python版本:首先要确定当前使用的Python版本是Python2还是Python3,可以通过在命令行中输入python -V来查看当前使用的Python版本。 确认代码是否兼容:Python2和Python3之间存在语法差异,特别是在一些高级特性和某些内置函数的使用上,需…

    python 2023年5月14日
    00
  • Python中HMAC加密算法的应用

    Python中HMAC加密算法的应用攻略 什么是HMAC HMAC(Hash-based Message Authentication Code)是一种基于哈希函数的消息认证码。它可以保证数据的完整性和真实性,是一种常用的安全认证方式。 HMAC的输入是消息和密钥,输出是一个固定长度的哈希值。根据密钥的不同,同一消息的哈希值也会不同,从而保证了数据的安全性。…

    python 2023年6月2日
    00
  • python控制台显示时钟的示例

    首先,我们需要明确一下需求:在Python控制台中实现一个时钟,能够精确地显示当前时间。要实现这个功能,我们需要使用Python的时间模块 time 和字符串格式化函数 strftime()。 下面是具体的实现攻略: 1. 加载 time 模块 首先,需要在Python代码中导入 time 模块。我们可以使用以下代码实现: import time 2. 获取…

    python 2023年6月3日
    00
  • Python随机生成带特殊字符的密码

    Python可以使用random模块生成随机密码,通过指定密码中可能出现的字符集,可以生成带特殊字符的密码。 下面是一些可以用来生成密码字符的字符集合: string.ascii_letters:包含所有大小写字母(a-zA-Z)的字符串。 string.digits:包含0-9的字符串。 string.punctuation:包含所有标点符号的字符串。 生…

    python 2023年6月3日
    00
  • 详解python路径拼接os.path.join()函数的用法

    当进行文件 or 文件夹拼接操作时,Python提供了os.path.join()函数。本文将详解os.path.join()函数并提供代码示例。 一、os.path.join()函数的用法 在Python操作文件时,经常需要处理文件路径合并问题。使用Python内置库os.path可以方便的处理平台间的差异,使用其中的os.path.join()函数可以实…

    python 2023年6月2日
    00
  • 关于Django框架的关系模型序列化和一对多关系中的序列化解析

    首先我们来讲解Django框架中的关系模型序列化。 关系模型序列化 关系模型指的是模型中的外键关系,比如一个Blog模型有多个Article模型,我们把Article模型作为Blog模型的外键,用ForeignKey字段来表示,这就构成了一个一对多的关系模型。在Django中,我们可以通过使用序列化器对关系模型进行序列化。 我们先定义一个Blog模型和一个A…

    python 2023年6月6日
    00
  • python用Tkinter做自己的中文代码编辑器

    下面我将详细讲解“python用Tkinter做自己的中文代码编辑器”的完整攻略。 一、Tkinter介绍 Tkinter是Python自带的GUI库,它提供了显示GUI界面所需要的各种组件。使用Tkinter编写代码的好处是它可以轻松跨平台运行,无需额外的安装。 二、制作自己的中文代码编辑器 制作一个自己的中文代码编辑器需要使用Tkinter的一些组件: …

    python 2023年5月19日
    00
  • 使用python将最新的测试报告以附件的形式发到指定邮箱

    要将最新的测试报告以附件的形式发到指定邮箱,可以使用Python的smtplib和email模块来实现。下面是实现的完整攻略: 1. 准备工作 首先需要准备以下内容: SMTP邮箱服务器的地址和端口号(比如,使用腾讯企业邮箱SMTP服务器地址为smtp.exmail.qq.com,端口号为465或587) 发件人的邮箱地址和登录密码 收件人的邮箱地址 最新的…

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