我们将原句替换为:**“凡有事发生必有利于我”**,并基于此新句子完成以下任务:
1. 使用 **jieba 的三种分词模式** 进行分词对比(精确模式、全模式、搜索引擎模式)
2. 使用 **函数方式** 添加/删除词语,实现词语的合并与拆分
3. 创建外部词典文件 `my_dict.txt`,使用 **外部文件方式** 加载自定义词,影响分词结果
---
### ✅ 新句子:`"凡有事发生必有利于我"`
```python
import jieba
# 自定义新句子
sentence = "凡有事发生必有利于我"
print("原始句子:", sentence)
print()
```
---
### 一、三种分词模式对比
```python
# 1. 精确模式
seg_exact = jieba.lcut(sentence, cut_all=False)
print("1. 精确模式:")
print(seg_exact)
print()
# 2. 全模式
seg_full = jieba.lcut(sentence, cut_all=True)
print("2. 全模式:")
print(seg_full)
print()
# 3. 搜索引擎模式
seg_search = jieba.lcut_for_search(sentence)
print("3. 搜索引擎模式:")
print(seg_search)
print()
```
#### 输出示例:
```
原始句子: 凡有事发生必有利于我
1. 精确模式:
['凡', '有事', '发生', '必', '有利于', '我']
2. 全模式:
['凡', '有事', '发生', '生', '必', '有利', '有利于', '于', '我']
3. 搜索引擎模式:
['凡', '有事', '发生', '必', '有利', '有利于', '我']
```
> 分析:
- “有事”、“发生”、“有利于” 被识别为词。
- “凡” 和 “我” 是单字词。
- 全模式会切出更多冗余词如“生”、“于”,可能导致歧义。
---
### 二、使用函数方式修改词典(合并与拆分)
我们希望:
- **合并**:“凡有事发生” 视为一个整体(哲学表达)
- **拆分**:“有利于” 原本被合并,我们想强制拆成 “有利” + “于”
```python
print("=== 使用函数方式调整词典 ===")
# 合并:添加新短语
jieba.add_word("凡有事发生", freq=50)
# 拆分:删除“有利于”,使其不再作为整体
jieba.del_word("有利于") # 或使用 del_word 强制拆分
# 重新分词
seg_modified = jieba.lcut(sentence)
print("添加'凡有事发生'并删除'有利于'后的分词结果:")
print(seg_modified)
```
#### 输出示例:
```
添加'凡有事发生'并删除'有利于'后的分词结果:
['凡有事发生', '必', '有利', '于', '我']
```
> 成功实现:
- “凡有事发生” → 合并为一个词
- “有利于” → 被拆分为 “有利” + “于”
---
### 三、使用外部文件方式加载自定义词典
创建文件 `my_dict.txt`,内容如下:
```
凡有事发生 50
必有利于我 40
有利 30
于 1
我 100
```
然后在代码中加载:
```python
print("=== 使用外部词典文件加载 ===")
# 加载用户词典
jieba.load_userdict("my_dict.txt")
# 清除缓存确保生效
jieba._calc_cache()
# 重新分词
seg_with_dict = jieba.lcut(sentence)
print("加载外部词典后的分词结果:")
print(seg_with_dict)
```
#### 输出示例(取决于词频和内部算法):
```
加载外部词典后的分词结果:
['凡有事发生', '必有利于我']
```
> 如果 `"必有利于我"` 被加入且频率高,jieba 可能将其视为一个整体(需注意上下文匹配能力有限,长句效果更好)。
---
### ✅ 总结对比表
| 操作方式 | 目标 | 方法 | 效果 |
|----------------|----------------|--------------------------|------------------------------|
| 函数方式 | 合并“凡有事发生” | `add_word("凡有事发生")` | 成功合并 |
| 函数方式 | 拆分“有利于” | `del_word("有利于")` | 拆为“有利”+“于” |
| 外部文件方式 | 批量定义词 | `load_userdict()` | 可统一管理项目词典 |
---
### ✅ 注意事项
- `jieba.add_word(word, freq=None, tag=None)`:可指定词频和词性提升优先级
- `jieba.del_word(word)`:仅对当前 session 有效
- 外部词典更适用于部署环境,便于版本控制
- 中文哲学/格言类句子常需人工干预分词,因训练语料中少见
---