本文目录导读:

我来为你介绍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
实际应用建议
- 中文分词:使用jieba进行准确的中文分词
- 停用词过滤:移除常见的无意义词
- 自定义词典:针对特定领域添加专业词汇
- 多方法结合:综合TF-IDF、TextRank等方法提高准确度
- 结果过滤:去除过短或过长的词条
选择哪种方法取决于你的具体需求:
- TF-IDF:适合准确度要求高、需要词权重的场景
- TextRank:适合不需要训练数据的场景
- 词频统计:适合快速简单的关键词提取
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播