分词
jieba.analyse.extract_tags 这个函数基于 TF-IDF(Term Frequency-Inverse Document Frequency)算法来提取关键词。TF-IDF 是一种统计方法,用于评估一个词语对于一个文档集或一个语料库中的其中一份文档的重要性。词语的重要性随着它在文档中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。
jieba.analyse.textrank 这个函数基于 TextRank 算法来提取关键词。TextRank 是一种基于图的排序算法,它将文本中的词语视为图中的节点,词语之间的关系(如共现关系)视为图中的边,然后通过迭代计算每个节点的得分来确定关键词。TextRank 算法不依赖于外部语料库,而是直接从文本本身提取信息,因此它更适合于提取文本内部的结构化信息。
import jieba
import jieba.analyse as analyse
import jieba.posseg as pseg
# 设置并行,假设计算机有4个CPU核心
jieba.enable_parallel(4)
text = "自然语言处理是人工智能领域的一个重要分支,它涉及到计算机和人类自然语言之间的交互。"
# 使用 TF-IDF 提取关键词
keywords_tfidf = jieba.analyse.extract_tags(text, topK=5)
print("TF-IDF Keywords:", ", ".join(keywords_tfidf))
# 使用 TextRank 提取关键词
keywords_textrank = jieba.analyse.textrank(text, topK=5)
print("TextRank Keywords:", ", ".join(keywords_textrank))
# 停用词
# --
# ?
# able
jieba.analyse.set_stop_words('停用词.txt')
# 加载自定义词典
# 自然语言处理 100 n
# 深度学习 80 n
# 机器学习 90 n
jieba.load_userdict("path/to/your/userdict.txt")
# 添加新词
jieba.add_word("我爱", freq=100, tag='n')
# 分词
text = "我爱自然语言处理和深度学习"
seg_list = jieba.cut(text, cut_all=False)
# 删除词
jieba.del_word('我爱')
# 分词
seg_list = jieba.cut(text, cut_all=False)
# 分词返回列表
seg_list = jieba.lcut(text, cut_all=False)
# 进行搜索引擎分词,这种模式会生成更多的分词结果,适用于搜索引擎优化。
jieba.cut_for_search(text)
# n:名词
# v:动词
# a:形容词
# d:副词
# p:介词
# c:连词
# u:助词
# e:叹词
# o:拟声词
# i:成语
# j:缩略语
# m:数词
# q:量词
# b:区别词
# r:代词
# t:时间词
# f:方位词
# s:处所词
# z:状态词
# h:前接成分
# k:后接成分
# g:语素字
# x:非语素字
# w:标点符号
# unk:未知词
# 使用词性标注进行分词
words = pseg.cut("我爱自然语言处理")
# 遍历分词结果,获取每个词语及其词性
for word, flag in words:
print(f"{word}: {flag}")
在 jieba 分词库中,cut_all=True 和 cut_for_search 是两种不同的分词模式,它们在分词策略和应用场景上有所区别。
cut_all=True - 全模式 当 cut_all=True 时,jieba 分词库会使用全模式进行分词。在全模式下,分词器会尽可能地切分出文本中所有可能的词语组合,不考虑上下文语境。这意味着全模式会生成大量的分词结果,包括单个字、短语以及可能的组合。全模式适用于需要穷举所有可能分词结果的场景,但通常不用于常规的文本分析,因为它可能会包含大量不相关的词语。
cut_for_search - 搜索引擎模式 cut_for_search 是 jieba 提供的一种专门为搜索引擎设计的分词模式。在这种模式下,分词器会生成更多的分词结果,包括一些较长的词语组合,以便于搜索引擎更好地索引和检索文本。搜索引擎模式考虑了用户在搜索时可能使用的查询词,因此它会比精确模式产生更多的分词结果,但不会像全模式那样过度切分。
主要区别 分词策略:全模式会穷举所有可能的分词结果,而搜索引擎模式会生成更多的分词结果,但不会过度切分。
应用场景:全模式适用于需要穷举所有可能分词结果的特殊场景,而搜索引擎模式适用于需要优化搜索引擎索引和检索的场景。
分词结果:全模式的分词结果通常包含大量不相关的词语,而搜索引擎模式的分词结果更倾向于包含用户可能搜索的词语。
示例
import jieba
import jieba.analyse as analyse
stop_words=[]
stop_words_file='./config/停用词.txt'
analyse.set_stop_words(stop_words_file)
with open(stop_words_file, 'r', encoding='utf-8') as file:
stop_words = [line.strip() for line in file]
if('' not in stop_words):stop_words.append('')
stop_words=set(stop_words)
class word:
def __init__(self) -> None:
pass
def stop(self,seg_list):
filtered_list = [w for w in seg_list if w.strip() not in stop_words]
return filtered_list
def cut_for_search(self,text):
back=jieba.cut_for_search(text)
back=self.stop(back)
return back
def cut(self,text):
back=jieba.cut(text, cut_all=False)
back=self.stop(back)
return back
def extract_tags(self,text,topK=5):
词频=analyse.extract_tags(text,topK=topK,withWeight=True)
词频=dict(词频)
词频=list(词频.keys())
return 词频
import jieba
from model.word import word
_word=word()
# able/起来(在停用词列表里)
jieba.add_word('我爱')
c=_word.cut_for_search('我爱自然语言处理 起来 able love')
c#['我爱', '自然', '语言', '自然语言', 'love']