1 前言
jieba
是一个非常流行的中文分词库,具有高效、准确分词的效果。
它支持3种分词模式:
jieba==0.42.1
测试环境:python3.10.9
2 三种模式
2.1 精确模式
适应场景:文本分析。
功能:可以将句子精确的分开。
import jieba
text = "有勇气的牛排是一个编程领域博主的名字"
segments = jieba.lcut(text)
print("精确模式分词结果:", segments)

2.2 全模式
适应场景:提取词语。
功能:可以将句子中的成词的词语扫描出来,速度非常快,但不能解决歧义问题。
import jieba
text = "有勇气的牛排是一个编程领域博主的名字"
segments = jieba.lcut(text, cut_all=True)
print("全模式分词结果:", segments)

2.3 搜索引擎模式
适应场景:搜索分词。
功能:在精确模式的基础上,对长分词进行切分,提高召回率。
import jieba
text = "有勇气的牛排是一个编程领域博主的名字"
segments = jieba.lcut_for_search(text)
print("搜索引擎模式分词结果:", segments)

3 自定义词典
jieba
允许用户自定义词典,以提高分词的准确性。
比如专业术语、名字、网络新流行词汇、方言、以及其他不常见短语名字等。
3.1 添加单个词语
import jieba
text = "有勇气的牛排是一个编程领域博主的名字"
jieba.add_word("有勇气的牛排")
segments = jieba.lcut_for_search(text)
print("搜索引擎模式分词结果:", segments)

3.2 添加词典文件
cs_dict.txt
有勇气的牛排
编程领域
main.py
import jieba
text = "有勇气的牛排是一个编程领域博主的名字"
jieba.load_userdict("cs_dict.txt")
segments = jieba.lcut(text)
print("自定义词典文件分词结果:", segments)

4 词性标注
jieba
的词性标注(POS tagging)功能使用了标注词性(Part-of-Speech tags)来表示每个词的词性。
4.1 词性对照表
原文地址:https://www.couragesteak.com/article/454
a 形容词 ad 副形词
ag 形容词性语素 an 名形词
b 区别词 c 连词
d 副词 dg 副语素
e 叹词 f 方位词
g 语素 h 前缀
i 成语 j 简称略语
k 后缀 l 习用语
m 数词 mg 数语素
mq 数量词 n 名词
ng 名语素 nr 人名
ns 地名 nt 机构团体
nz 其他专名 o 拟声词
p 介词 q 量词
r 代词 rg 代词性语素
s 处所词 t 时间词
tg 时间词性语素 u 助词
vg 动语素 v 动词
vd 副动词 vn 名动词
w 标点符号 x 非语素字
y 语气词 z 状态词
4.2 测试案例
import jieba.posseg as pseg
text = "有勇气的牛排是一个编程领域博主的名字"
words = pseg.cut(text)
for word, flag in words:
print(f"{word} - {flag}")

5 关键词提取
from jieba import analyse
text = "有勇气的牛排是一个编程领域博主的名字"
keywords = analyse.extract_tags(text, topK=5)
print("关键词提取结果:", keywords)

6 词频统计
import jieba
from collections import Counter
text = "有勇气的牛排是一个编程领域博主的名字"
segments = jieba.lcut(text)
word_counts = Counter(segments)
print("词频统计结果:", word_counts)

<h2><a id="1__0"></a>1 前言</h2>
<p><code>jieba</code> 是一个非常流行的中文分词库,具有高效、准确分词的效果。</p>
<p>它支持3种分词模式:</p>
<ul>
<li>精确模式</li>
<li>全模式</li>
<li>搜索引擎模式</li>
</ul>
<pre><div class="hljs"><code class="lang-python">jieba==<span class="hljs-number">0.42</span><span class="hljs-number">.1</span>
</code></div></pre>
<p>测试环境:python3.10.9</p>
<h2><a id="2__18"></a>2 三种模式</h2>
<h3><a id="21__20"></a>2.1 精确模式</h3>
<p>适应场景:文本分析。</p>
<p>功能:可以将句子精确的分开。</p>
<pre><div class="hljs"><code class="lang-python"><span class="hljs-keyword">import</span> jieba
text = <span class="hljs-string">"有勇气的牛排是一个编程领域博主的名字"</span>
segments = jieba.lcut(text)
<span class="hljs-built_in">print</span>(<span class="hljs-string">"精确模式分词结果:"</span>, segments)
<span class="hljs-comment"># ['有', '勇气', '的', '牛排', '是', '一个', '编程', '领域', '博主', '的', '名字']</span>
</code></div></pre>
<p><img src="https://static.couragesteak.com/article/baec519ed7b6df8c7f8d485ec8ac6cf6.png" alt="jieba分词 精确模式" /></p>
<h3><a id="22__38"></a>2.2 全模式</h3>
<p>适应场景:提取词语。</p>
<p>功能:可以将句子中的成词的词语扫描出来,速度非常快,但不能解决歧义问题。</p>
<pre><div class="hljs"><code class="lang-python"><span class="hljs-keyword">import</span> jieba
text = <span class="hljs-string">"有勇气的牛排是一个编程领域博主的名字"</span>
segments = jieba.lcut(text, cut_all=<span class="hljs-literal">True</span>)
<span class="hljs-built_in">print</span>(<span class="hljs-string">"全模式分词结果:"</span>, segments)
<span class="hljs-comment"># ['有', '勇气', '的', '牛排', '是', '一个', '编程', '领域', '博', '主', '的', '名字']</span>
</code></div></pre>
<p><img src="https://static.couragesteak.com/article/5eac1b65f0376ef09990eb5f249b6719.png" alt="jieba分词 全模式" /></p>
<h3><a id="23__56"></a>2.3 搜索引擎模式</h3>
<p>适应场景:搜索分词。</p>
<p>功能:在精确模式的基础上,对长分词进行切分,提高召回率。</p>
<pre><div class="hljs"><code class="lang-python"><span class="hljs-keyword">import</span> jieba
text = <span class="hljs-string">"有勇气的牛排是一个编程领域博主的名字"</span>
segments = jieba.lcut_for_search(text)
<span class="hljs-built_in">print</span>(<span class="hljs-string">"搜索引擎模式分词结果:"</span>, segments)
</code></div></pre>
<p><img src="https://static.couragesteak.com/article/a9e1e7e7e21f9125d23d0b1463851534.png" alt="jieba分词 搜索引擎模式" /></p>
<h2><a id="3__75"></a>3 自定义词典</h2>
<p><code>jieba</code>允许用户自定义词典,以提高分词的准确性。</p>
<p>比如专业术语、名字、网络新流行词汇、方言、以及其他不常见短语名字等。</p>
<h3><a id="31__81"></a>3.1 添加单个词语</h3>
<pre><div class="hljs"><code class="lang-python"><span class="hljs-keyword">import</span> jieba
text = <span class="hljs-string">"有勇气的牛排是一个编程领域博主的名字"</span>
jieba.add_word(<span class="hljs-string">"有勇气的牛排"</span>)
segments = jieba.lcut_for_search(text)
<span class="hljs-built_in">print</span>(<span class="hljs-string">"搜索引擎模式分词结果:"</span>, segments)
<span class="hljs-comment"># ['勇气', '牛排', '有勇气的牛排', '是', '一个', '编程', '领域', '博主', '的', '名字']</span>
</code></div></pre>
<p><img src="https://static.couragesteak.com/article/2aec6b88cc748f92622382316af0da80.png" alt="jieba分词添加单个词语" /></p>
<h3><a id="32__98"></a>3.2 添加词典文件</h3>
<p>cs_dict.txt</p>
<pre><code class="lang-">有勇气的牛排
编程领域
</code></pre>
<p>main.py</p>
<pre><div class="hljs"><code class="lang-python"><span class="hljs-keyword">import</span> jieba
text = <span class="hljs-string">"有勇气的牛排是一个编程领域博主的名字"</span>
jieba.load_userdict(<span class="hljs-string">"cs_dict.txt"</span>)
segments = jieba.lcut(text)
<span class="hljs-built_in">print</span>(<span class="hljs-string">"自定义词典文件分词结果:"</span>, segments)
<span class="hljs-comment"># ['有勇气的牛排', '是', '一个', '编程领域', '博主', '的', '名字']</span>
</code></div></pre>
<p><img src="https://static.couragesteak.com/article/96ca4bc358d1f4c0e0e677b15a16dc31.png" alt="jieba自定义词典" /></p>
<h2><a id="4__125"></a>4 词性标注</h2>
<p><code>jieba</code> 的词性标注(POS tagging)功能使用了标注词性(Part-of-Speech tags)来表示每个词的词性。</p>
<h3><a id="41__129"></a>4.1 词性对照表</h3>
<p>原文地址:<a href="https://www.couragesteak.com/article/454" target="_blank">https://www.couragesteak.com/article/454</a></p>
<pre><div class="hljs"><code class="lang-shell">a 形容词 ad 副形词
ag 形容词性语素 an 名形词
b 区别词 c 连词
d 副词 dg 副语素
e 叹词 f 方位词
g 语素 h 前缀
i 成语 j 简称略语
k 后缀 l 习用语
m 数词 mg 数语素
mq 数量词 n 名词
ng 名语素 nr 人名
ns 地名 nt 机构团体
nz 其他专名 o 拟声词
p 介词 q 量词
r 代词 rg 代词性语素
s 处所词 t 时间词
tg 时间词性语素 u 助词
vg 动语素 v 动词
vd 副动词 vn 名动词
w 标点符号 x 非语素字
y 语气词 z 状态词
</code></div></pre>
<h3><a id="42__157"></a>4.2 测试案例</h3>
<pre><div class="hljs"><code class="lang-python"><span class="hljs-keyword">import</span> jieba.posseg <span class="hljs-keyword">as</span> pseg
text = <span class="hljs-string">"有勇气的牛排是一个编程领域博主的名字"</span>
words = pseg.cut(text)
<span class="hljs-keyword">for</span> word, flag <span class="hljs-keyword">in</span> words:
<span class="hljs-built_in">print</span>(<span class="hljs-string">f"<span class="hljs-subst">{word}</span> - <span class="hljs-subst">{flag}</span>"</span>)
</code></div></pre>
<p><img src="https://static.couragesteak.com/article/96ca4bc358d1f4c0e0e677b15a16dc31.png" alt="jieba词性 案例" /></p>
<h2><a id="5__173"></a>5 关键词提取</h2>
<pre><div class="hljs"><code class="lang-python"><span class="hljs-keyword">from</span> jieba <span class="hljs-keyword">import</span> analyse
text = <span class="hljs-string">"有勇气的牛排是一个编程领域博主的名字"</span>
<span class="hljs-comment"># 取前5个关键词</span>
keywords = analyse.extract_tags(text, topK=<span class="hljs-number">5</span>)
<span class="hljs-built_in">print</span>(<span class="hljs-string">"关键词提取结果:"</span>, keywords)
</code></div></pre>
<p><img src="https://static.couragesteak.com/article/1d4d25adda1cdb67b81b95824e549e52.png" alt="jieba关键词提取" /></p>
<h2><a id="6__188"></a>6 词频统计</h2>
<pre><div class="hljs"><code class="lang-python"><span class="hljs-keyword">import</span> jieba
<span class="hljs-keyword">from</span> collections <span class="hljs-keyword">import</span> Counter
text = <span class="hljs-string">"有勇气的牛排是一个编程领域博主的名字"</span>
<span class="hljs-comment"># 取前5个关键词</span>
segments = jieba.lcut(text)
word_counts = Counter(segments)
<span class="hljs-built_in">print</span>(<span class="hljs-string">"词频统计结果:"</span>, word_counts)
</code></div></pre>
<p><img src="https://static.couragesteak.com/article/ad8dbff8b37fa29fb2789f3c1ee97797.png" alt="jieba词频统计" /></p>
留言