TextRank算法代码实践

"""
关键词抽取: 是指从文本中确定一些能够描述文档含义的关键术语的过程
关键短语抽取: 关键词抽取结束后, 可以得到N个关键词, 在原始文本中相邻的关键词便构成了关键短语
关键句抽取: 句子抽取任务主要就是为了解决自动文本摘要任务, 将每一个sentence作为一个顶点, 根据两个句子之间的内容重复程度来计算他们之间的相似度
"""
import jieba.analyse
from textrank4zh import TextRank4Keyword, TextRank4Sentence


# 提取文本中的关键词
def extract_keywords(text):
    # 设置允许的词性标签,主要是名词
    noun_tags = ['n', 'nr', 'nrfg', 'ns', 'nt', 'nz']

    # 初始化关键词提取器,指定允许的词性
    keyword_extractor = TextRank4Keyword(allow_speech_tags=noun_tags)

    # 分析文本,生成关键词图
    keyword_extractor.analyze(
        text,                          # 输入文本
        window=2,                      # 滑动窗口大小
        lower=True,                    # 将文本转换为小写
        vertex_source='all_filters',   # 顶点来源,使用所有过滤条件
        edge_source='no_stop_words',   # 边的来源,不使用停用词
        pagerank_config={'alpha': 0.85}  # PageRank 算法的阻尼系数
    )

    # 提取前6个关键词,关键词最小长度为2
    extracted_keywords = keyword_extractor.get_keywords(num=6, word_min_len=2)

    # 输出提取的关键词
    print('关键词:', extracted_keywords)


# 提取文本中的关键短语
def extract_keyphrases(text):
    # 初始化关键短语提取器
    phrase_extractor = TextRank4Keyword()

    # 分析文本,生成关键短语图
    phrase_extractor.analyze(
        text,                          # 输入文本
        window=2,                      # 滑动窗口大小
        lower=True,                    # 将文本转换为小写
        vertex_source='all_filters',   # 顶点来源,使用所有过滤条件
        edge_source='no_stop_words',   # 边的来源,不使用停用词
        pagerank_config={'alpha': 0.85}  # PageRank 算法的阻尼系数
    )

    # 提取前6个关键短语,每个短语至少包含2个关键词
    extracted_keyphrases = phrase_extractor.get_keyphrases(keywords_num=6, min_occur_num=1)

    # 输出提取的关键短语
    print('关键短语:', extracted_keyphrases)


# 提取文本中的关键句
def extract_keysentences(text):
    # 初始化关键句提取器
    sentence_extractor = TextRank4Sentence()

    # 分析文本,生成关键句图
    sentence_extractor.analyze(
        text,                          # 输入文本
        lower=True,                    # 将文本转换为小写
        source='no_stop_words',        # 句子来源,不使用停用词
        pagerank_config={'alpha': 0.85}  # PageRank 算法的阻尼系数
    )

    # 提取前3个关键句,句子最小长度为6
    extracted_keysentences = sentence_extractor.get_key_sentences(num=3, sentence_min_len=6)

    # 输出提取的关键句
    print('关键句:', extracted_keysentences)


# 使用Jieba库提取关键词
def extract_keywords_jieba(text):
    # 使用jieba的textrank算法提取前6个关键词
    jieba_keywords = jieba.analyse.textrank(text, topK=6)

    # 输出Jieba提取的关键词
    print('Jieba提取的关键词:', jieba_keywords)


# 主程序入口
if __name__ == '__main__':
    # 示例文本,包含自然语言处理相关内容
    sample_text = "自然语言处理中的TextRank算法是非常重要的技术。通过应用它,我们可以从给定的文本中提取关键短语、关键词和重要句子。" \
                  "这在文本摘要、情感分析等应用中非常有用。有了像jieba和textrank4zh这样的Python库,实现这一算法变得相当简单。"

    # 调用函数提取关键词、关键短语、关键句以及使用Jieba提取关键词
    extract_keywords(sample_text)
    extract_keyphrases(sample_text)
    extract_keysentences(sample_text)
    extract_keywords_jieba(sample_text)

关键词: [{'word': '短语', 'weight': 0.3742185906449433}, {'word': '关键', 'weight': 0.1975060892929125}, {'word': '关键词', 'weight': 0.1975060892929125}, {'word': '算法', 'weight': 0.038461538461538575}, {'word': '技术', 'weight': 0.038461538461538575}, {'word': '文本', 'weight': 0.038461538461538575}]
关键短语: ['关键短语']
关键句: [{'index': 1, 'sentence': '通过应用它,我们可以从给定的文本中提取关键短语、关键词和重要句子', 'weight': 0.2641462213783074}, {'index': 0, 'sentence': '自然语言处理中的TextRank算法是非常重要的技术', 'weight': 0.25745608240303836}, {'index': 2, 'sentence': '这在文本摘要、情感分析等应用中非常有用', 'weight': 0.25049576615361446}]
Jieba提取的关键词: ['文本', '算法', '应用', '情感', '分析', '提取']

好的,以下是一个简单的textRANK算法Python代码: ``` import jieba import numpy as np class TextRank: def __init__(self, text, window=5, alpha=0.85, eps=1e-4): self.text = text self.window = window self.alpha = alpha self.eps = eps self.words = list(jieba.cut(text)) self.word_set = list(set(self.words)) self.word_index = {w: i for i, w in enumerate(self.word_set)} self.word_count = len(self.word_set) self.graph = np.zeros((self.word_count, self.word_count)) self.weights = np.zeros(self.word_count) self.scores = np.ones(self.word_count) def build_graph(self): for i in range(len(self.words)): for j in range(i - self.window, i + self.window + 1): if j < 0 or j >= len(self.words) or i == j: continue self.graph[self.word_index[self.words[i]]][self.word_index[self.words[j]]] += 1 def calculate_weights(self): for i in range(self.word_count): self.weights[i] = np.sum(self.graph[i]) def update_scores(self): new_scores = np.zeros(self.word_count) for i in range(self.word_count): for j in range(self.word_count): if self.graph[j][i] != 0: new_scores[i] += self.alpha * self.scores[j] / self.weights[j] new_scores[i] += 1 - self.alpha if np.sum(np.abs(new_scores - self.scores)) < self.eps: return False self.scores = new_scores return True def get_top_keywords(self, k=10): for i in range(100): if not self.update_scores(): break top_indices = np.argsort(-self.scores)[:k] return [self.word_set[i] for i in top_indices] text = "这是一段测试文本,用于测试textRank算法的效果。" tr = TextRank(text) tr.build_graph() tr.calculate_weights() keywords = tr.get_top_keywords() print(keywords) ``` 这个算法可以用于提取文本中的关键词,它基于图论的思想,将文本中的词语看作图中的节点,词语之间的共现关系看作边,通过迭代计算每个节点的权重,最终得到文本中的关键词。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值