xmnlp

小明NLP:提供中文分词, 词性标注, 拼写检查,文本转拼音,情感分析,文本摘要,偏旁部首

Github stars Tracking Chart

pypi
python version
support os
GitHub license

功能概览

  • 中文分词 & 词性标注
    • 支持繁體
    • 支持自定义词典
  • 中文拼写检查
  • 文本摘要 & 关键词提取
  • 情感分析
  • 文本转拼音
  • 获取汉字偏旁部首

安装使用

安装方式

方式一

pip install xmnlp

方式二

git clone https://github.com/SeanLee97/xmnlp.git
cd /path/to/xmnlp
pip install -r requirements.txt
python setup.py install

使用文档

中文分词

xmnlp.seg(text[, hmm=True])

- text: 输入文本
- hmm: 是否使用 hmm 算法识别新词
import xmnlp

doc = """小明 NLP 是一款开源的轻量级中文自然语言处理工具?,当前版本发布时间为2019年9月,改版本修复了一些 bug 也增加了一些特性,主要新增特性如下:分词/词性标注支持日期、email、url、html标签、书?的识别。如果您有什么建议/疑问欢迎联系我 xmlee97@gmail.com"""

xmnlp.seg(doc, hmm=True)

分词结果

['小明', 'NLP', '是', '一款', '开源', '的', '轻量级', '中文', '自然语言', '处理', '工具', '?', ',', '当前', '版本', '发布', '时间', '为', '2019年9月', ',', '改', '版本', '修复', '了', '一些', 'bug', '也', '增加', '了', '一些', '特性', ',', '主要', '新增', '特性', '如下', ':', '分词', '/', '词性', '标注', '支持', '日期', '、', 'email', '、', 'url', '、', 'html', '标签', '、', '书?', '的', '识别', '。', '如果', '您', '有', '什么', '建议', '/', '疑问', '欢迎', '联系', '我', 'xmlee97@gmail.com']

并行分词

xmnlp.seg_parallel(texts[, hmm=True, n_jobs=4])

- texts: list of str
- hmm: 是否使用 hmm 算法识别新词
import xmnlp

xmnlp.seg_parallel(['结婚的和尚未结婚的都成了和尚',
                    '我喜欢《瓦尔登湖》这本书,如果你也喜欢欢迎联系我 xxx@gmail.com',
                    '<h1>谷歌</h1>的网址是https://google.com',
                    '现在时间是2019年10月'])

并行分词结果

[['结婚', '的', '和', '尚未', '结婚', '的', '都', '成', '了', '和尚'],
 ['我', '喜欢', '《瓦尔登湖》', '这', '本书', ',', '如果', '你', '也', '喜欢', '欢迎', '联系', '我', 'xxx@gmail.com'],
 ['<h1>', '谷歌', '</h1>', '的', '网址', '是', 'https://google.com'],
 ['现在', '时间', '是', '2019年10月']]

词性标注

xmnlp.tag(text[, hmm=True])

- text: 输入文本
- hmm: 是否使用 hmm 算法识别新词
import xmnlp

doc = """小明 NLP 是一款开源的轻量级中文自然语言处理工具?,当前版本发布时间为2019年9月,改版本修复了一些 bug 也增加了一些特性,主要新增特性如下:分词/词性标注支持日期、email、url、html标签、书?的识别。如果您有什么建议/疑问欢迎联系我 xmlee97@gmail.com"""

xmnlp.tag(doc)

词性标注结果

[('小明', 'nr'), ('NLP', 'eng'), ('是', 'v'), ('一款', 'm'), ('开源', 'n'), ('的', 'uj'), ('轻量级', 'b'), ('中文', 'nz'), ('自然语言', 'l'), ('处理', 'v'), ('工具', 'n'), ('?', 'y'), (',', 'w'), ('当前', 't'), ('版本', 'n'), ('发布', 'v'), ('时间', 'n'), ('为', 'p'), ('2019年9月', 'datetime'), (',', 'w'), ('改', 'v'), ('版本', 'n'), ('修复', 'v'), ('了', 'ul'), ('一些', 'm'), ('bug', 'eng'), ('也', 'd'), ('增加', 'v'), ('了', 'ul'), ('一些', 'm'), ('特性', 'n'), (',', 'w'), ('主要', 'b'), ('新增', 'v'), ('特性', 'n'), ('如下', 't'), (':', 'w'), ('分词', 'n'), ('/', 'z'), ('词性', 'n'), ('标注', 'v'), ('支持', 'v'), ('日期', 't'), ('、', 'w'), ('email', 'eng'), ('、', 'w'), ('url', 'eng'), ('、', 'w'), ('html', 'eng'), ('标签', 'n'), ('、', 'w'), ('书?', 'z'), ('的', 'uj'), ('识别', 'v'), ('。', 'w'), ('如果', 'c'), ('您', 'zg'), ('有', 'v'), ('什么', 'r'), ('建议', 'n'), ('/', 'b'), ('疑问', 'v'), ('欢迎', 'v'), ('联系', 'n'), ('我', 'r'), ('xmlee97@gmail.com', 'email')]

并行词性标注

xmnlp.tag_parallel(texts[, hmm=True, n_jobs=4])

- texts: list of str
- hmm: 是否使用 hmm 算法识别新词
import xmnlp

xmnlp.tag_parallel(['结婚的和尚未结婚的都成了和尚',
                    '我喜欢《瓦尔登湖》这本书,如果你也喜欢欢迎联系我 xxx@gmail.com',
                    '<h1>谷歌</h1>的网址是https://google.com',
                    '现在时间是2019年10月'])

并行词性标注结果

[[('结婚', 'v'), ('的', 'uj'), ('和', 'c'), ('尚未', 'd'), ('结婚', 'v'), ('的', 'uj'), ('都', 'd'), ('成', 'n'), ('了', 'ul'), ('和尚', 'nr')],
 [('我', 'r'), ('喜欢', 'v'), ('《瓦尔登湖》', 'book'), ('这', 'r'), ('本书', 'r'), (',', 'w'), ('如果', 'c'), ('你', 'r'), ('也', 'd'), ('喜欢', 'v'), ('欢迎', 'v'), ('联系', 'n'), ('我', 'r'), ('xxx@gmail.com', 'email')],
 [('<h1>', 'html'), ('谷歌', 'n'), ('</h1>', 'html'), ('的', 'uj'), ('网址', 'n'), ('是', 'v'), ('https://google.com', 'url')],
 [('现在', 't'), ('时间', 'n'), ('是', 'v'), ('2019年10月', 'datetime')]]

用户自定义字典

xmnlp 支持用户自定义字典,只需调用 xmnlp.set_userdict(/path/to/userdict) 即可设置自定义字典,自定义字典的格式为:

词 词频
词 词频 词性

例如

自然语言处理 1000 nw

拼写检查

此功能基于symspell实现,建议用来检查词级别的错误,对于句子尚未能很好的解决拼写错误问题,第一次加载字典的速度较慢(由词典大小决定)

词级别

import xmnlp
xmnlp.set_userdict('./userdict.txt')

doc = """中国人敏共和国"""

print('Error: \n', doc)
ret = xmnlp.checker(doc, level=0) # level = 0
print('Correct: \n', ret)

结果输出

中华人民共和国

句子级别

level=1, 不建议使用,句级别仅返回所有可能的拼写检查结果

import xmnlp
xmnlp.set_userdict('./userdict.txt')

doc = """今天天汽不错哦"""

print('Error: \n', doc)
ret = xmnlp.checker(doc, level=1) # level = 1
print('Correct: \n', ret)

结果输出

['今天天气', '不错']

文本摘要

基于textrank算法实现

import xmnlp
xmnlp.set_stopword('/path/to/stopword.txt') # 添加用户自定义停用词

doc = """自然语言处理: 是人工智能和语言学领域的分支学科。
在这此领域中探讨如何处理及运用自然语言;自然语言认知则是指让电脑“懂”人类的语言。 
自然语言生成系统把计算机数据转化为自然语言。自然语言理解系统把自然语言转化为计算机程序更易于处理的形式。"""

# keyword
print(xmnlp.keyword(doc))
# keyphrase
print(xmnlp.keyphrase(doc))

结果输出

keyphrase: 

自然语言理解系统自然语言转化计算机程序易于形式
自然语言生成系统计算机数据转化自然语言
自然语言认知指让电脑懂人类语言
这此领域中探讨自然语言
自然语言人工智能语言学领域分支学科

keyword: 
[('自然语言', 2.5960552414414391), ('系统', 1.3424759005594451), ('转化', 1.2404934273839832), ('领域', 1.13500044179745), ('语言', 1.0865431295952139)]

情感分析

基于朴素贝叶斯算法实现,基于酒店评价数据训练

import xmnlp
xmnlp.set_stopword('/path/to/stopword.txt') # 用户自定义停用词

doc = """这件衣服的质量也太差了吧!"""
doc2 = """这酒店真心不错"""
print('Text: ', doc)
print('Score: ', xmnlp.sentiment(doc))
print('Text: ', doc2)
print('Score: ', xmnlp.sentiment(doc2))

结果输出

Text:  这件衣服的质量也太差了吧!
Score:  0.09661951767426591
Text:  这酒店真心不错
Score:  0.7947237609561072

汉字部首

部首是一种文本的特征,在深度学习中我们有时可以加入部首特征来训练网络

import xmnlp
xmnlp.radical('自然语言处理')

结果输出

['自', '灬', '讠', '言', '夂', '王']

自定义模型

支持用户使用自己的语料训练模型,训练例子在examples 的trainer_*中

训练语料

百度网盘 提取码: 9xkp

更多

关于贡献者

当前本 project 主要者贡献这来自 @4AI 成员,我们期待更多小伙伴的 contributions,一起打造一款简单易用的中文 NLP 工具

学术引用 citation

@misc{
  xmnlp,
  title={A Lightweight Chinese Natural Language Processing Toolkit},
  author={Xianming Li},
  year={2019},
  publisher={GitHub},
  howpublished={\url{https://github.com/SeanLee97/xmnlp}},
}

Reference:

本项目采用的数据主要有:

  • 人民日报语料
  • 结巴分词分词数据
  • snownlp情感分析语料 + 部分作者爬取的语料

本项目受到以下项目的启发

License

MIT

Main metrics

Overview
Name With OwnerSeanLee97/xmnlp
Primary LanguagePython
Program languagePython (Language Count: 2)
Platform
License:Apache License 2.0
所有者活动
Created At2018-02-04 01:48:44
Pushed At2022-11-12 03:29:39
Last Commit At2022-11-12 11:29:18
Release Count15
Last Release Namev0.5.3 (Posted on 2022-11-12 11:18:47)
First Release Namev0.1.8 (Posted on )
用户参与
Stargazers Count1.3k
Watchers Count28
Fork Count188
Commits Count128
Has Issues Enabled
Issues Count39
Issue Open Count9
Pull Requests Count14
Pull Requests Open Count0
Pull Requests Close Count0
项目设置
Has Wiki Enabled
Is Archived
Is Fork
Is Locked
Is Mirror
Is Private