Python关键词提取案例如何提取文本关键词

wen python案例 28

本文目录导读:

Python关键词提取案例如何提取文本关键词

  1. TF-IDF 方法(最常用)
  2. TextRank 算法
  3. 使用jieba直接提取
  4. 完整的关键词提取工具类
  5. 批量文本关键词提取
  6. 安装依赖
  7. 实际应用建议

我来为你介绍Python文本关键词提取的几种常用方法,包括具体的代码示例。

TF-IDF 方法(最常用)

from sklearn.feature_extraction.text import TfidfVectorizer
import jieba
# 示例文本
texts = [
    "我喜欢在北京天安门看升国旗,五星红旗迎风飘扬",
    "Python是一种流行的编程语言,常用于数据分析",
    "机器学习是人工智能的重要分支,深度学习是机器学习的子集"
]
# 分词函数
def cut_words(text):
    return ' '.join(jieba.cut(text))
# 处理文本
processed_texts = [cut_words(text) for text in texts]
# 计算TF-IDF
vectorizer = TfidfVectorizer(max_features=100)
tfidf_matrix = vectorizer.fit_transform(processed_texts)
# 提取关键词
feature_names = vectorizer.get_feature_names_out()
for i, text in enumerate(texts):
    print(f"\n文本{i+1}的关键词:")
    # 获取该文本的TF-IDF值
    row = tfidf_matrix[i].toarray()[0]
    # 获取词与权重的对应关系
    word_weights = [(feature_names[j], row[j]) for j in range(len(row)) if row[j] > 0]
    # 按权重排序
    word_weights.sort(key=lambda x: x[1], reverse=True)
    # 显示前5个关键词
    for word, weight in word_weights[:5]:
        print(f"{word}: {weight:.4f}")

TextRank 算法

from textrank4zh import TextRank4Keyword
text = "我喜欢在北京天安门看升国旗,五星红旗迎风飘扬,Python是一种流行的编程语言,常用于数据分析。"
tr4w = TextRank4Keyword()
tr4w.analyze(text=text, lower=True, window=2)
print("TextRank提取的关键词:")
for item in tr4w.get_keywords(10, word_min_len=1):
    print(f"{item.word}: {item.weight:.4f}")

使用jieba直接提取

import jieba.analyse
text = "我喜欢在北京天安门看升国旗,五星红旗迎风飘扬,Python是一种流行的编程语言,常用于数据分析。"
# 基于TF-IDF算法
keywords_tfidf = jieba.analyse.extract_tags(text, topK=5, withWeight=True)
print("jieba TF-IDF关键词:")
for word, weight in keywords_tfidf:
    print(f"{word}: {weight:.4f}")
# 基于TextRank算法
keywords_textrank = jieba.analyse.textrank(text, topK=5, withWeight=True)
print("\njieba TextRank关键词:")
for word, weight in keywords_textrank:
    print(f"{word}: {weight:.4f}")

完整的关键词提取工具类

import jieba
import jieba.analyse
from collections import Counter
class KeywordExtractor:
    def __init__(self):
        # 加载自定义词典(可选)
        # jieba.load_userdict("user_dict.txt")
        pass
    def extract_by_tfidf(self, text, topK=10):
        """基于TF-IDF提取关键词"""
        keywords = jieba.analyse.extract_tags(
            text, 
            topK=topK, 
            withWeight=True
        )
        return keywords
    def extract_by_textrank(self, text, topK=10):
        """基于TextRank提取关键词"""
        keywords = jieba.analyse.textrank(
            text, 
            topK=topK, 
            withWeight=True
        )
        return keywords
    def extract_by_frequency(self, text, topK=10):
        """基于词频提取关键词"""
        # 分词并过滤停用词
        words = jieba.cut(text)
        stop_words = self._load_stop_words()
        words = [word for word in words 
                if word not in stop_words and len(word) > 1]
        # 统计词频
        word_freq = Counter(words)
        return word_freq.most_common(topK)
    def _load_stop_words(self):
        """加载停用词表"""
        # 这里使用简单的停用词列表
        stop_words = set([
            '的', '了', '在', '是', '我', '有', '和', '就', 
            '不', '人', '都', '一', '一个', '上', '也', '很',
            '到', '说', '要', '去', '你', '会', '着', '没有'
        ])
        return stop_words
# 使用示例
extractor = KeywordExtractor()
text = """
北京市是中国首都,也是政治文化中心,这里有许多著名景点,
比如故宫、天安门广场、长城等,北京不仅是历史名城,也是现代化大都市。
"""
print("TF-IDF关键词:")
for word, weight in extractor.extract_by_tfidf(text, topK=5):
    print(f"{word}: {weight:.4f}")
print("\nTextRank关键词:")
for word, weight in extractor.extract_by_textrank(text, topK=5):
    print(f"{word}: {weight:.4f}")
print("\n基于词频的关键词:")
for word, count in extractor.extract_by_frequency(text, topK=5):
    print(f"{word}: {count}")

批量文本关键词提取

import pandas as pd
import jieba.analyse
def batch_extract_keywords(texts, topK=5):
    """批量提取关键词"""
    results = []
    for text in texts:
        # 提取关键词
        keywords = jieba.analyse.extract_tags(text, topK=topK)
        results.append({
            'text': text[:30] + '...' if len(text) > 30 else text,
            'keywords': ','.join(keywords)
        })
    return pd.DataFrame(results)
# 示例数据
data = [
    "Python编程语言在人工智能和机器学习领域应用广泛",
    "中国经济持续增长,科技创新推动产业升级",
    "环保意识日益增强,可再生能源发展迅速"
]
# 批量处理
result_df = batch_extract_keywords(data, topK=3)
print(result_df)

安装依赖

pip install jieba
pip install scikit-learn
pip install textrank4zh
pip install pandas

实际应用建议

  1. 中文分词:使用jieba进行准确的中文分词
  2. 停用词过滤:移除常见的无意义词
  3. 自定义词典:针对特定领域添加专业词汇
  4. 多方法结合:综合TF-IDF、TextRank等方法提高准确度
  5. 结果过滤:去除过短或过长的词条

选择哪种方法取决于你的具体需求:

  • TF-IDF:适合准确度要求高、需要词权重的场景
  • TextRank:适合不需要训练数据的场景
  • 词频统计:适合快速简单的关键词提取

抱歉,评论功能暂时关闭!