方法介绍
jieba分词
jieba分词常用的功能有:
-
对文本进行切词
-
对文本进行切词,并标注词性
-
添加自定义词库,进行切词或词性标注
import jieba
from jieba import posseg
# 切词
words = []
words.extend(jieba.cut("本院定于2021年5月17日9时在本院第六法庭公开开庭审理宇汝传与佳伟建设集团有限公司因申请财产保全损害责任纠纷一案。"))
print(words)
>>>['本院', '定于', '2021', '年', '5', '月', '17', '日', '9', '时', '在', '本院', '第六', '法庭', '公开', '开庭审理', '宇汝传', '与', '佳伟', '建设', '集团', '有限公司', '因', '申请', '财产', '保全', '损害', '责任', '纠纷', '一案', '。']
# 词性标注
words = []
words.extend(posseg.cut("本院定于2021年5月17日9时在本院第六法庭公开开庭审理宇汝传与佳伟建设集团有限公司因申请财产保全损害责任纠纷一案。"))
print(words)
>>>[pair('本院', 'n'), pair('定于', 'v'), pair('2021', 'm'), pair('年', 'm'), pair('5', 'm'), pair('月', 'm'), pair('17', 'm'), pair('日', 'm'), pair('9', 'm'), pair('时', 'ng'), pair('在', 'p'), pair('本院', 'n'), pair('第六', 'm'), pair('法庭', 'n'), pair('公开', 'ad'), pair('开庭审理', 'n'), pair('宇汝传', 'nr'), pair('与', 'p'), pair('佳', 'a'), pair('伟', 'nr'), pair('建设', 'vn'), pair('集团', 'n'), pair('有限公司', 'n'), pair('因', 'p'), pair('申请', 'v'), pair('财产', 'n'), pair('保全', 'v'), pair('损害', 'v'), pair('责任', 'n'), pair('纠纷', 'n'), pair('一案', 'm'), pair('。', 'x')]
# 添加自定义词库
jieba.load_userdict("lexicon.txt")
words = []
words.extend(posseg.cut("本院定于2021年5月17日9时在本院第六法庭公开开庭审理宇汝传与佳伟建设集团有限公司因申请财产保全损害责任纠纷一案。", HMM=False))
print(words)
>>>[pair('本院', 'n'), pair('定于', 'v'), pair('2021', 'eng'), pair('年', 'm'), pair('5', 'eng'), pair('月', 'm'), pair('17', 'eng'), pair('日', 'm'), pair('9', 'eng'), pair('时', 'n'), pair('在', 'p'), pair('本院', 'n'), pair('第六', 'm'), pair('法庭', 'n'), pair('公开', 'ad'), pair('开庭审理', 'n'), pair('宇', 'nr'), pair('汝', 'nr'), pair('传', 'n'), pair('与', 'link'), pair('佳', 'a'), pair('伟', 'zg'), pair('建设', 'vn'), pair('集团', 'n'), pair('有限公司', 'organ'), pair('因', 'p'), pair('申请', 'v'), pair('财产保全', 'cause'), pair('损害', 'v'), pair('责任', 'n'), pair('纠纷', 'cause'), pair('一案', 'case'), pair('。', 'x')]
说明:
-
自定义词库可能是多个文件,可多次调用load_userdict方法
-
自定义词库文件中的词和词性用空格分隔
字典树
字典树用来在一段文本中提取目标词,以及目标词自定义词性
字典树使用步骤:
-
创建目标词库(文本文件)
-
建树(初始化)
-
查找、搜索目标词
from tries_utils import build_tree, build_kv_tree, search_tree_to_list, search_tree_to_set, search_kv_tree
# 创建目标词库(文本文件) 并 建树
tree = build_kv_tree("lexicon.txt")
# 查找、搜索目标词
print(search_tree_to_list("本院定于2021年5月17日9时在本院第六法庭公开开庭审理宇汝传与佳伟建设集团有限公司因申请财产保全损害责任纠纷一案。", tree))
print(search_kv_tree("本院定于2021年5月17日9时在本院第六法庭公开开庭审理宇汝传与佳伟建设集团有限公司因申请财产保全损害责任纠纷一案。", tree))
>>>['与', '有限公司', '财产保全', '纠纷', '一案']
>>>[['与|link'], ['有限公司|organ'], ['财产保全|cause'], ['纠纷|cause'], ['一案|case']]
说明:
- 自定义词库文件中的词和词性用tab键分隔
飞桨词法分析模型
百度开源项目,地址:https://www.paddlepaddle.org.cn/
自封装模块地址:project-collie/collie_common/collie/utils/ner
根据官方文档安装环境
import paddlehub as hub
lac = hub.Module(name='lac')
results = lac.lexical_analysis(texts=["本院定于2021年5月17日9时在本院第六法庭公开开庭审理宇汝传与佳伟建设集团有限公司因申请财产保全损害责任纠纷一案。"])
print(results)
>>> [{'word': ['本院', '定于', '2021年5月17日9时', '在', '本院', '第六', '法庭', '公开', '开庭', '审理', '宇汝传', '与', '佳伟建设集团有限公司', '因', '申请', '财产', '保全', '损害', '责任', '纠纷', '一案', '。'], 'tag': ['n', 'v', 'TIME', 'p', 'r', 'm', 'n', 'ad', 'v', 'v', 'PER', 'p', 'ORG', 'p', 'v', 'n', 'vn', 'vn', 'n', 'n', 'n', 'w']}]
lac模型的缺点:
-
Lenovo、Microsoft、证监会等都会被识别为 ORG
-
分支机构名称会被识别为两部分,或机构名称识别不全
lac模型的优点:
-
能够很好的识别人名(少数名族可能较差)
-
能够识别中文格式的时间
正则表达式
略
命名实体识别
命名实体识别就是识别文本中的实体,包括机构名、人名、地点、时间等
通过词性标注+规则 识别机构名
-
收集自定义词库,对其进行分类标注词性
-
通过jieba分词进行词性标注,并根据机构名词性组装公司名
优点:
-
可简单通过添加词库提高识别率
-
可调整规则,控制提取的机构名的规范性
-
能解决lac模型识别不准的问题
缺点:
-
不能识别人名
-
需要花时间整理词库
-
规则的编写对逻辑思维能力要求较高
## jieba词性标注 + 规则 识别公司名 结果
['本院定于:link', '2021:eng', '年:m', '5:eng', '月:m', '17:eng', '日:m', '9:eng', '时:n', '在本院:link', '第六:m', '法庭:n', '公开开庭审理:link', '宇:nr', '汝:nr', '传:n', '与:link', '佳伟建设集团有限公司:ORG', '因:p', '申请:v', '财产:n', '保全:v', '损害:v', '责任纠纷:sintype', '一案:m', '。:x']
## 进一步合并非关心词性
[('本院定于', 'link'), '2021年5月17日9时', ('在本院', 'link'), '第六法庭', ('公开开庭审理', 'link'), '宇汝传', ('与', 'link'), ('佳伟建设集团有限公司', 'ORG'), '因申请财产保全损害', ('责任纠纷', 'sintype'), '一案', '。']
通过通用的训练好的模型
# 对上步没有识别的内容通过lac模型识别
[('本院定于', 'link'), ('2021年5月17日9时', 'TIME'), ('在本院', 'link'), '第六法庭', ('公开开庭审理', 'link'), ('宇汝', 'PER'), '传', ('与', 'link'), ('佳伟建设集团有限公司', 'ORG'), '因申请财产保全损害', ('责任纠纷', 'sintype'), '一案', '。']
应用
判断自然人和非自然人
维护机构名后缀词库,通过字典树从短文本中提取目标词
模块地址:
project-collie/collie_common/collie/utils/person_or_organ
通过公司名称、登记机关、地址对主体进行地区划分
维护民政部的行政区划词库,通过字典树从公司的名称、登记机关、地址 信息中提取 地名,再基于规则 对其进行所属地区划分
模块地址:
project-collie/collie_common/collie/utils/company_area
提取司法文本中的当事人及相关信息
综合运用字典树、jieba分词、基于词性标注的规则组合、lac词法分析模型、正则表达式等提取司法案件当事人信息
模块样例:
project-collie-app/app_risk/udms/wenshu_ld/wenshu_parse