Python代码实现关键词提取中文分词词性标注以及 tf-idf
时间: 2023-11-05 15:13:19 浏览: 142
实现中文分词和词性标注可以使用jieba和pynlpir这两个库,而TF-IDF的实现可以使用sklearn库。以下是Python代码实现:
```python
import jieba
import jieba.posseg as pseg
import pynlpir
from sklearn.feature_extraction.text import TfidfVectorizer
# 分词和词性标注
def segment(text):
# 使用jieba分词
words = jieba.cut(text)
# 使用pseg标注词性
words_with_pos = pseg.cut(text)
return [(word, flag) for word, flag in words_with_pos]
# 初始化pynlpir
pynlpir.open()
# 分词和词性标注
def segment(text):
# 使用pynlpir分词
words = pynlpir.segment(text)
# 使用pynlpir标注词性
words_with_pos = pynlpir.postag(words)
return [(word, flag) for word, flag in words_with_pos]
# 计算TF-IDF
def tfidf(texts):
# 初始化TfidfVectorizer
vectorizer = TfidfVectorizer()
# 计算TF-IDF矩阵
tfidf_matrix = vectorizer.fit_transform(texts)
# 获取关键词列表
feature_names = vectorizer.get_feature_names()
# 遍历每个文本
for i in range(len(texts)):
# 获取该文本的TF-IDF矩阵
tfidf_vector = tfidf_matrix[i]
# 将该文本的关键词按照TF-IDF值从大到小排序
sorted_indices = tfidf_vector.toarray()[0].argsort()[::-1]
# 获取该文本的前10个关键词
top_10 = [feature_names[j] for j in sorted_indices[:10]]
print("Top 10 keywords in text ", i+1, ": ", top_10)
# 测试代码
text1 = "这是一段测试文本,用于测试分词和词性标注。"
text2 = "这是另外一段测试文本,用于测试TF-IDF关键词提取。"
texts = [text1, text2]
for text in texts:
print(segment(text))
tfidf(texts)
```
注意,使用pynlpir需要先安装pynlpir库,并且需要下载pynlpir所需的数据包。可以使用以下代码进行安装和下载:
```python
import pynlpir
# 安装pynlpir
pynlpir.open()
# 下载所需的数据包
pynlpir.nlpir.update()
```
另外,TF-IDF的计算需要将文本转换为向量表示,因此需要使用TfidfVectorizer类。在调用fit_transform方法计算TF-IDF矩阵之前,需要先使用get_feature_names方法获取所有的关键词。最后,可以使用argsort方法对TF-IDF值进行排序,并获取前10个关键词。
阅读全文