Xmnlp
xmnlp:提供中文分词, 词性标注, 命名体识别,情感分析,文本纠错,文本转拼音,文本摘要,偏旁部首,句子表征及文本相似度计算等功能
Install / Use
/learn @SeanLee97/XmnlpREADME
<a name="overview"></a>
功能概览
- 中文词法分析 (RoBERTa + CRF finetune)
- 分词
- 词性标注
- 命名体识别
- 支持自定义字典
- 中文拼写检查 (Detector + Corrector SpellCheck)
- 文本摘要 & 关键词提取 (Textrank)
- 情感分析 (RoBERTa finetune)
- 文本转拼音 (Trie)
- 汉字偏旁部首 (HashMap)
- 句子表征及相似度计算
<a name="outline"></a>
Outline
<a name="installation"></a>
一. 安装
<br />安装最新版 xmnlp<br />
pip install -U xmnlp
<br />国内用户可以加一下 index-url<br />
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -U xmnlp
安装完包之后,还需要下载模型权重才可正常使用
<br /><a name="installation-download"></a>
模型下载
<br />请下载 xmnlp 对应版本的模型,如果不清楚 xmnlp 的版本,可以执行python -c 'import xmnlp; print(xmnlp.__version__)' 查看版本<br />
| 模型名称 | 适用版本 | 下载地址 | | --- | --- | --- | | xmnlp-onnx-models-v5.zip | v0.5.0, v0.5.1, v0.5.2, v0.5.3 | 飞书 [IGHI] | 百度网盘 [l9id] | | xmnlp-onnx-models-v4.zip | v0.4.0 | 飞书 [DKLa] | 百度网盘 [j1qi] | | xmnlp-onnx-models-v3.zip | v0.3.2, v0.3.3 | 飞书 [o4bA] | 百度网盘 [9g7e] |
<a name="installation-configure"></a>
配置模型
下载模型后需要设置模型路径 xmnlp 才可以正常运行。提供两种配置方式
方式 1:配置环境变量(推荐)
<br />下载好的模型解压后,可以设置环境变量指定模型地址。以 Linux 系统为例,设置如下<br />
export XMNLP_MODEL=/path/to/xmnlp-models
方式 2:通过函数设置
<br />在调用 xmnlp 前设置模型地址,如下<br />
import xmnlp
xmnlp.set_model('/path/to/xmnlp-models')
<br />* 上述 /path/to/ 只是占位用的,配置时请替换成模型真实的目录地址。<br />
<a name="usage"></a>
二. 使用文档
<a name="usage-seg"></a>
xmnlp.seg(text: str) -> List[str]
<br />中文分词(默认),基于逆向最大匹配来分词,采用 RoBERTa + CRF 来进行新词识别。<br /> <br />参数:<br />
- text:输入文本
<br />结果返回:<br />
- 列表,分词后的结果
<br />示例:<br />
>>> import xmnlp
>>> text = """xmnlp 是一款开箱即用的轻量级中文自然语言处理工具🔧。"""
>>> print(xmnlp.seg(text))
['xmnlp', '是', '一款', '开箱', '即用', '的', '轻量级', '中文', '自然语言', '处理', '工具', '🔧', '。']
<br />
<a name="usage-fast_seg"></a>
xmnlp.fast_seg(text: str) -> List[str]
<br />基于逆向最大匹配来分词,不包含新词识别,速度较快。<br /> <br />参数:<br />
- text:输入文本
<br />结果返回:<br />
- 列表,分词后的结果
<br />示例:<br />
>>> import xmnlp
>>> text = """xmnlp 是一款开箱即用的轻量级中文自然语言处理工具🔧。"""
>>> print(xmnlp.seg(text))
['xmnlp', '是', '一款', '开箱', '即', '用', '的', '轻量级', '中文', '自然语言', '处理', '工具', '🔧', '。']
<br />
<a name="usage-deep_seg"></a>
xmnlp.deep_seg(text: str) -> List[str]
<br />基于 RoBERTa + CRF 模型,速度较慢。当前深度接口只支持简体中文,不支持繁体。<br /> <br />参数:<br />
- text:输入文本
<br />结果返回:<br />
- 列表,分词后的结果
<br />示例:<br />
>>> import xmnlp
>>> text = """xmnlp 是一款开箱即用的轻量级中文自然语言处理工具🔧。"""
>>> print(xmnlp.deep_seg(text))
['xmnlp', '是', '一款', '开箱', '即用', '的', '轻', '量级', '中文', '自然', '语言', '处理', '工具', '🔧', '。']
<br />
<a name="usage-tag"></a>
xmnlp.tag(text: str) -> List[Tuple(str, str)]
<br />词性标注。<br /> <br />参数:<br />
- text:输入文本
<br />结果返回:<br />
- 词和词性元组组成的列表
<br />示例:<br />
>>> import xmnlp
>>> text = """xmnlp 是一款开箱即用的轻量级中文自然语言处理工具🔧。"""
>>> print(xmnlp.tag(text))
[('xmnlp', 'eng'), ('是', 'v'), ('一款', 'm'), ('开箱', 'n'), ('即用', 'v'), ('的', 'u'), ('轻量级', 'b'), ('中文', 'nz'), ('自然语言', 'l'), ('处理', 'v'), ('工具', 'n'), ('🔧', 'x'), ('。', 'x')]
<br />
<a name="usage-fast_tag"></a>
xmnlp.fast_tag(text: str) -> List[Tuple(str, str)]
<br />基于逆向最大匹配,不包含新词识别,速度较快。<br /> <br />参数:<br />
- text:输入文本
<br />结果返回:<br />
- 词和词性元组组成的列表
<br />示例:<br />
>>> import xmnlp
>>> text = """xmnlp 是一款开箱即用的轻量级中文自然语言处理工具🔧。"""
>>> print(xmnlp.fast_tag(text))
[('xmnlp', 'eng'), ('是', 'v'), ('一款', 'm'), ('开箱', 'n'), ('即', 'v'), ('用', 'p'), ('的', 'uj'), ('轻量级', 'b'), ('中文', 'nz'), ('自然语言', 'l'), ('处理', 'v'), ('工具', 'n'), ('🔧', 'x'), ('。', 'x')]
<br />
<a name="usage-deep_tag"></a>
xmnlp.deep_tag(text: str) -> List[Tuple(str, str)]
<br />基于 RoBERTa + CRF 模型,速度较慢。当前深度接口只支持简体中文,不支持繁体。<br /> <br />参数:<br />
- text:输入文本
<br />结果返回:<br />
- 词和词性元组组成的列表
<br />示例:<br />
>>> import xmnlp
>>> text = """xmnlp 是一款开箱即用的轻量级中文自然语言处理工具🔧。"""
>>> print(xmnlp.deep_tag(text))
[('xmnlp', 'x'), ('是', 'v'), ('一款', 'm'), ('开箱', 'v'), ('即用', 'v'), ('的', 'u'), ('轻', 'nz'), ('量级', 'b'), ('中文', 'nz'), ('自然', 'n'), ('语言', 'n'), ('处理', 'v'), ('工具', 'n'), ('🔧', 'w'), ('。', 'w')]
<br />
<a name="usage-userdict"></a>
分词&词性标注自定义字典
支持用户自定义字典,字典格式为
词1 词性1
词2 词性2
也兼容 jieba 分词的字典格式
词1 词频1 词性1
词2 词频2 词性2
注:上述行内的间隔符为空格
<br />使用示例:<br />
from xmnlp.lexical.tokenization import Tokenization
# 定义 tokenizer
# detect_new_word 定义是否识别新词,默认 True, 设为 False 时速度会更快
tokenizer = Tokenization(user_dict_path, detect_new_word=True)
# 分词
tokenizer.seg(texts)
# 词性标注
tokenizer.tag(texts)
<br />
<a name="usage-ner"></a>
xmnlp.ner(text: str) -> List[Tuple(str, str, int, int)]
<br />命名体识别,支持识别的实体类型为:
- TIME:时间
- LOCATION:地点
- PERSON:人物
- JOB:职业
- ORGANIZAIRION:机构
<br />参数:<br />
- text:输入文本
<br />结果返回:<br />
- 实体、实体类型、实体起始位置和实体结尾位置组成的列表
<br />示例:<br />
>>> import xmnlp
>>> text = "现任美国总统是拜登。"
>>> print(xmnlp.ner(text))
[('美国', 'LOCATION', 2, 4), ('总统', 'JOB', 4, 6), ('拜登', 'PERSON', 7, 9)]
<br />
<a name="usage-keyword"></a>
xmnlp.keyword(text: str, k: int = 10, stopword: bool = True, allowPOS: Optional[List[str]] = None) -> List[Tuple[str, float]]
<br />从文本中提取关键词,基于 Textrank 算法。<br /> <br />参数:<br />
- text:文本输入
- k:返回关键词的个数
- stopword:是否去除停用词
- allowPOS:配置允许的词性
<br />结果返回:<br />
- 由关键词和权重组成的列表
<br />示例:<br />
>>> import xmnlp
>>> text = """自然语言处理: 是人工智能和语言学领域的分支学科。
...: 在这此领域中探讨如何处理及运用自然语言;自然语言认知则是指让电脑“懂”人类的
...: 语言。
...: 自然语言生成系统把计算机数据转化为自然语言。自然语言理解系统把自然语言转化
...: 为计算机程序更易于处理的形式。"""
>>> print(xmnlp.keyword(text))
[('自然语言', 2.3000579596585897), ('语言', 1.4734141257937314), ('计算机', 1.3747500999598312), ('转化', 1.2687686226652466), ('系统', 1.1171384775870152), ('领域', 1.0970728069617324), ('人类', 1.0192131829490039), ('生成', 1.0075197087342542), ('认知', 0.9327188339671753), ('指', 0.9218423928455112)]
<br />
<a name="usage-keyphrase"></a>
xmnlp.keyphrase(text: str, k: int = 10, stopword: bool = False) -> List[str]
<br />从文本中提取关键句,基于 Textrank 算法。<br /> <br />参数:<br />
- text:文本输入
- k:返回关键词的个数
- stopword:是否去除停用词
<br />结果返回:<br />
- 由关键词和权重组成的列表
<br />示例:<br />
>>> import xmnlp
>>> text = """自然语言处理: 是人工智能和语言学领域的分支学科。
...: 在这此领域中探讨如何处理及运用自然语言;自然语言认知则是指让电脑“懂”人类的
...: 语言。
...: 自然语言生成系统把计算机数据转化为自然语言。自然语言理解系统把自然语言转化
...: 为计算机程序更易于处理的形式。"""
>>> print(xmnlp.keyphrase(text, k=2))
['自然语言理解系统把自然语言转化为计算机程序更易于处理的形式', '自然语言生成系统把计算机数据转化为自然语言']
<br />
<a name="usage-sentiment"></a>
xmnlp.sentiment(text: str) -> Tuple[float, float]
<br />情感识别,基于电商评论语料训练,适用于电商场景下的情感识别。<br /> <br />参数:<br />
- text:输入文本
<br />结果返回:<br />
- 元组,格式为:[负向情感概率,正向情感概率]
<br />示例:<br />
>>> import xmnlp
>>> text = "这本书真不错,下次还要买"
>>> print(xmnlp.sentiment(text))
(0.02727833203971386, 0.9727216958999634)
<br />
<a name="usage-pinyin"></a>
xmnlp.pinyin(text: str) -> List[str]
<br />文本转拼音<br /> <br />参数:<br />
- text:输入文本
<br />结果返回:<br />
- 拼音组成的列表
<br />示例:<br />
>>> import xmnlp
>>> text = "自然语言处理"
>>> print(xmnlp.pinyin(text))
['Zi', 'ran', 'yu', 'yan', 'chu', 'li']
<br />
<a name="usage-radical"></a>
xmnlp.radical(text: str) -> List[str]
<br />提取文本部首<br /> <br />参数:<br />
- text:输入文本
<br />结果返回:<br />
- 部首组成的列表
<br />示例:<br />
>>> import xmnlp
>>> text = "自然语言处理"
>>> print(xmnlp.radical(text))
['自', '灬', '讠', '言', '夂', '王']
<br />
<a name="usage-checker"></a>
xmnlp.checker(text: str, suggest: bool = True, k: int = 5, max_k: int = 200) -> Union[ List[Tuple[int, str]], Dict[Tuple[int, str], List[Tuple[str, float]]]]:
<br />文本纠错<br /> <br />参数:<br />
- text:输入文本
- sugg
