All Projects → SeanLee97 → Xmnlp

SeanLee97 / Xmnlp

Licence: apache-2.0
xmnlp:提供中文分词, 词性标注, 命名体识别,情感分析,文本纠错,文本转拼音,文本摘要,偏旁部首等功能

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to Xmnlp

wink-nlp
Developer friendly Natural Language Processing ✨
Stars: ✭ 312 (-47.21%)
Mutual labels:  sentiment-analysis, ner
Chatbot cn
基于金融-司法领域(兼有闲聊性质)的聊天机器人,其中的主要模块有信息抽取、NLU、NLG、知识图谱等,并且利用Django整合了前端展示,目前已经封装了nlp和kg的restful接口
Stars: ✭ 791 (+33.84%)
Mutual labels:  sentiment-analysis, ner
Rust Bert
Rust native ready-to-use NLP pipelines and transformer-based models (BERT, DistilBERT, GPT2,...)
Stars: ✭ 510 (-13.71%)
Mutual labels:  sentiment-analysis, ner
Nlp Papers
Papers and Book to look at when starting NLP 📚
Stars: ✭ 111 (-81.22%)
Mutual labels:  sentiment-analysis, ner
Cluedatasetsearch
搜索所有中文NLP数据集,附常用英文NLP数据集
Stars: ✭ 2,112 (+257.36%)
Mutual labels:  sentiment-analysis, ner
Dan Jurafsky Chris Manning Nlp
My solution to the Natural Language Processing course made by Dan Jurafsky, Chris Manning in Winter 2012.
Stars: ✭ 124 (-79.02%)
Mutual labels:  sentiment-analysis, ner
Turkish Bert Nlp Pipeline
Bert-base NLP pipeline for Turkish, Ner, Sentiment Analysis, Question Answering etc.
Stars: ✭ 85 (-85.62%)
Mutual labels:  sentiment-analysis, ner
Malaya
Natural Language Toolkit for bahasa Malaysia, https://malaya.readthedocs.io/
Stars: ✭ 239 (-59.56%)
Mutual labels:  sentiment-analysis, ner
Bertweet
BERTweet: A pre-trained language model for English Tweets (EMNLP-2020)
Stars: ✭ 282 (-52.28%)
Mutual labels:  sentiment-analysis, ner
Vicword
一个纯php分词
Stars: ✭ 516 (-12.69%)
Mutual labels:  segmentation
Medicalzoopytorch
A pytorch-based deep learning framework for multi-modal 2D/3D medical image segmentation
Stars: ✭ 546 (-7.61%)
Mutual labels:  segmentation
Cpu Internals
Intel / AMD CPU Internals
Stars: ✭ 510 (-13.71%)
Mutual labels:  segmentation
Mynlp
一个生产级、高性能、模块化、可扩展的中文NLP工具包。(中文分词、平均感知机、fastText、拼音、新词发现、分词纠错、BM25、人名识别、命名实体、自定义词典)
Stars: ✭ 519 (-12.18%)
Mutual labels:  pinyin
Video analyst
A series of basic algorithms that are useful for video understanding, including Single Object Tracking (SOT), Video Object Segmentation (VOS) and so on.
Stars: ✭ 550 (-6.94%)
Mutual labels:  segmentation
Sequence Labeling Bilstm Crf
The classical BiLSTM-CRF model implemented in Tensorflow, for sequence labeling tasks. In Vex version, everything is configurable.
Stars: ✭ 579 (-2.03%)
Mutual labels:  ner
Face segmentation
Deep face segmentation in extremely hard conditions
Stars: ✭ 510 (-13.71%)
Mutual labels:  segmentation
Multi Human Parsing
🔥🔥Official Repository for Multi-Human-Parsing (MHP)🔥🔥
Stars: ✭ 507 (-14.21%)
Mutual labels:  segmentation
Deep Learning For Hackers
Machine Learning tutorials with TensorFlow 2 and Keras in Python (Jupyter notebooks included) - (LSTMs, Hyperameter tuning, Data preprocessing, Bias-variance tradeoff, Anomaly Detection, Autoencoders, Time Series Forecasting, Object Detection, Sentiment Analysis, Intent Recognition with BERT)
Stars: ✭ 586 (-0.85%)
Mutual labels:  sentiment-analysis
Cilantro
A lean C++ library for working with point cloud data
Stars: ✭ 577 (-2.37%)
Mutual labels:  segmentation
Sentibridge
SentiBridge: A Knowledge Base for Entity-Sentiment Representation
Stars: ✭ 542 (-8.29%)
Mutual labels:  sentiment-analysis

/ xmnlp /

轻量级中文自然语言处理工具

A Lightweight Chinese Natural Language Processing Toolkit

pypi pypi downloads python version tensorflow version support os GitHub license


功能概览

  • 中文简体词法分析 (RoBERTa + CRF finetune)
    • 分词
    • 词性标注
    • 命名体识别
  • 中文拼写检查 (Detector + Corrector SpellCheck)
  • 文本摘要 & 关键词提取 (Textrank)
  • 情感分析 (RoBERTa finetune)
  • 文本转拼音 (Trie)
  • 汉字偏旁部首 (HashMap)

Outline

一. 安装

1. 安装库

方式 1


安装最新版 xmnlp

pip install -U xmnlp


国内用户可以加一下 index-url

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -U xmnlp

方式 2

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

2. 下载模型

下载地址


请下载 xmnlp 对应版本的模型,如果不清楚 xmnlp 的版本,可以执行python -c 'import xmnlp; print(xmnlp.__version__)' 查看版本

模型名称 适用版本 下载地址
xmnlp-models-v3.zip v0.3.0, v0.3.1 飞书 [8eoo] | 百度网盘 [gvq3]


* 如果下载地址失效了,烦请提 issue 反馈

模型设置

提供两种设置方式

方式 1:配置环境变量(推荐)


下载好的模型解压后,可以设置环境变量指定模型地址。以 Linux 系统为例,设置如下

export XMNLP_MODEL=/path/to/xmnlp-models

方式 2:通过函数设置


在调用 xmnlp 前设置模型地址,如下

import xmnlp

xmnlp.set_model('/path/to/xmnlp-models')


* 上述 /path/to/ 只是占位用的,配置时请替换成模型真实的目录地址。

二. 使用文档

xmnlp.seg(text: str) -> List[str]


中文分词。

参数:

  • text:输入文本


结果返回:

  • 列表,分词后的结果


示例:

>>> import xmnlp
>>> text = """xmnlp 是一款开源的轻量级中文自然语言处理工具🔧。
   ...: 功能涵盖:中文分词、词性标注、命名体识别、文本纠错,情感识别,文本转拼音、提取文本部首等。
   ...: 如果您有什么建议/疑问欢迎联系我 [email protected]"""
>>> print(xmnlp.seg(text))
['xmnlp', '是', '一款', '开源', '的', '轻量级', '中文', '自然语言', '处理', '工具', '🔧', '。', '功能', '涵盖', ':', '中文', '分', '词', '、', '词性', '标注', '、', '命名体识别', '、', '文本', '纠错', ',', '情感识别', ',', '文本', '转', '拼音', '、', '提取', '文', '本', '部', '首等', '。', '如果', '您', '有', '什么', '建议', '/', '疑问', '欢迎', '联系', '我', 'xmlee97', '@', 'gmail', '.', 'com']

xmnlp.seg_parallel(texts: List[str], n_jobs: int = 2) -> Generator[List[str], None, None]:


并行处理中文分词。

参数:

  • texts:文本列表
  • n_jobs: 线程 worker 数


结果返回:

  • generator


示例:

>>> import xmnlp
>>> texts = ['xmnlp 是一款开源的轻量级中文自然语言处理工具🔧',
   ...:      '功能涵盖:中文分词、词性标注、命名体识别、文本纠错,情感识别,文本转拼音、提取文本部首等。']
>>> print(list(xmnlp.seg_parallel(texts)))
[['xmnlp', '是', '一款', '开源', '的', '轻量级', '中文', '自然语言', '处理', '工具', '🔧'], ['功能', '涵盖', ':', '中文', '分词', '、', '词', '性', '标注', '、', '命名体识别', '、', '文本', '纠错', ',', '情感识别', ',', '文本', '转', '拼音', '、', '提取', '文本', '部', '首等', '。']]

xmnlp.tag(text: str) -> List[Tuple(str, str)]


词性标注。

参数:

  • text:输入文本


结果返回:

  • 词和词性元组组成的列表


示例:

>>> import xmnlp
>>> text = """xmnlp 是一款开源的轻量级中文自然语言处理工具🔧。
   ...: 功能涵盖:中文分词、词性标注、命名体识别、文本纠错,情感识别,文本转拼音、提取文本部首等。
   ...: 如果您有什么建议/疑问欢迎联系我 [email protected]"""
>>> print(xmnlp.tag(text))
[('xmnlp', 'x'), ('是', 'v'), ('一款', 'm'), ('开源', 'v'), ('的', 'u'), ('轻量级', 'b'), ('中文', 'nz'), ('自然语言', 'nz'), ('处理', 'v'), ('工具', 'n'), ('🔧', 'n'), ('。', 'w'), ('功能', 'n'), ('涵盖', 'v'), (':', 'w'), ('中文', 'nz'), ('分', 'q'), ('词', 'n'), ('、', 'w'), ('词性', 'nz'), ('标注', 'v'), ('、', 'w'), ('命名体识别', 'g'), ('、', 'w'), ('文本', 'n'), ('纠错', 'vn'), (',', 'w'), ('情感识别', 'nz'), (',', 'w'), ('文本', 'n'), ('转', 'v'), ('拼音', 'n'), ('、', 'w'), ('提取', 'v'), ('文', 'ng'), ('本', 'r'), ('部', 'q'), ('首等', 'b'), ('。', 'w'), ('如果', 'c'), ('您', 'r'), ('有', 'v'), ('什么', 'r'), ('建议', 'n'), ('/', 'w'), ('疑问', 'n'), ('欢迎', 'v'), ('联系', 'vn'), ('我', 'r'), ('xmlee97', 'x'), ('@', 'w'), ('gmail', 'x'), ('.', 'w'), ('com', 'x')]

xmnlp.tag_parallel(texts: List[str], n_jobs: int = 2) -> Generator[List[Tuple(str, str)], None, None]:


并行处理词性标注。

参数:

  • texts:文本列表
  • n_jobs: 线程 worker 数


结果返回:

  • generator


示例:

>>> import xmnlp
>>> texts = ['xmnlp 是一款开源的轻量级中文自然语言处理工具🔧',
   ...:      '功能涵盖:中文分词、词性标注、命名体识别、文本纠错,情感识别,文本转拼音、提取文本部首等。']
>>> print(list(xmnlp.tag_parallel(texts)))
[[('xmnlp', 'x'), ('是', 'v'), ('一款', 'm'), ('开源', 'v'), ('的', 'u'), ('轻量级', 'b'), ('中文', 'nz'), ('自然语言', 'nz'), ('处理', 'v'), ('工具', 'n'), ('🔧', 'w')], [('功能', 'n'), ('涵盖', 'v'), (':', 'w'), ('中文', 'nz'), ('分词', 'n'), ('、', 'w'), ('词', 'n'), ('性', 'ng'), ('标注', 'v'), ('、', 'w'), ('命名体识别', 'nz'), ('、', 'w'), ('文本', 'n'), ('纠错', 'vn'), (',', 'w'), ('情感识别', 'nz'), (',', 'w'), ('文本', 'n'), ('转', 'v'), ('拼音', 'n'), ('、', 'w'), ('提取', 'v'), ('文本', 'n'), ('部', 'q'), ('首等', 'v'), ('。', 'w')]]

xmnlp.ner(text: str) -> List[Tuple(str, str, int, int)]


命名体识别,支持识别的实体类型为:

  • TIME:时间
  • LOCATION:地点
  • PERSON:人物
  • JOB:职业
  • ORGANIZAIRION:机构


参数:

  • text:输入文本


结果返回:

  • 实体、实体类型、实体起始位置和实体结尾位置组成的列表


示例:

>>> import xmnlp
>>> text = "现任美国总统是拜登。"
>>> print(xmnlp.ner(text))
[('美国', 'LOCATION', 2, 4), ('总统', 'JOB', 4, 6), ('拜登', 'PERSON', 7, 9)]

xmnlp.ner_parallel(texts: List[str], n_jobs: int = 2) -> Generator[List[Tuple(str, str, int, int)] None, None]:


并行处理命名体识别。

参数:

  • texts:文本列表
  • n_jobs: 线程 worker 数


结果返回:

  • generator


示例:

>>> import xmnlp
>>> texts = ['现任美国总统是拜登',
   ...:      '前任美国总统是特朗普']
>>> print(list(xmnlp.tag_parallel(texts)))
[[('美国', 'LOCATION', 2, 4), ('总统', 'JOB', 4, 6), ('拜登', 'PERSON', 7, 9)], [('美国', 'LOCATION', 2, 4), ('总统', 'JOB', 4, 6), ('特朗普', 'PERSON', 7, 10)]]

xmnlp.keyword(text: str, k: int = 10, stopword: bool = True, allowPOS: Optional[List[str]] = None) -> List[Tuple[str, float]]


从文本中提取关键词,基于 Textrank 算法。

参数:

  • text:文本输入
  • k:返回关键词的个数
  • stopword:是否去除停用词
  • allowPOS:配置允许的词性


结果返回:

  • 由关键词和权重组成的列表


示例:

>>> 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)]

xmnlp.keyword_parallel(texts: List[str], k: int = 10, stopword: bool = True, allowPOS: Optional[List[str]] = None, n_jobs: int = 2) -> Generator[List[Tuple[str, float]], None, None]


并行处理关键词提取。

参数:

  • texts:文本列表
  • k:返回关键词的个数
  • stopword:是否去除停用词
  • allowPOS:配置允许的词性
  • n_jobs: 线程 worker 数


结果返回:

  • generator


示例:

>>> import xmnlp
>>> docs = ["""自然语言处理: 是人工智能和语言学领域的分支学科。\n在这此领域中探讨
    ...: 如何处理及运用自然语言;自然语言认知则是指让电脑“懂”人类的语言。 \n自然语言
    ...: 生成系统把计算机数据转化为自然语言。自然语言理解系统把自然语言转化为计算机
    ...: 程序更易于处理的形式。""",
    ...:    """xmnlp 是一款开源的轻量级中文自然语言处理工具🔧。  功能涵盖:中文分词、词
    ...: 性标注、命名体识别、文本纠错,情感识别,文本转拼音、提取文本部首等。  如果
    ...: 您有什么建议/疑问欢迎联系我 [email protected]"""]
>>> print(list(xmnlp.keyword_parallel(docs)))
[[('自然语言', 2.3000579596585897), ('语言', 1.4734141257937314), ('计算机', 1.3747500999598312), ('转化', 1.2687686226652466), ('系统', 1.1171384775870152), ('领域', 1.0970728069617324), ('人类', 1.0192131829490039), ('生成', 1.0075197087342542), ('认知', 0.9327188339671753), ('指', 0.9218423928455112)], [('文本', 1.4318894662141104), ('中文', 1.3756785780080754), ('建议', 1.1420258441127817), ('提取文本', 1.1214039563905946), ('拼音', 1.106313873517177), ('分词', 1.0886571300192784), ('词', 1.0816698383766425), ('标注', 1.0773997802582003), ('疑问', 1.0279032612606591), ('工具', 1.02290616843714)]]

xmnlp.keyphrase(text: str, k: int = 10, stopword: bool = False) -> List[str]


从文本中提取关键句,基于 Textrank 算法。

参数:

  • text:文本输入
  • k:返回关键词的个数
  • stopword:是否去除停用词


结果返回:

  • 由关键词和权重组成的列表


示例:

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

xmnlp.keyphrase_parallel(texts: List[str], k: int = 10, stopword: bool = False, n_jobs: int = 2) -> Generator[List[str], None, None]


并行处理关键句提取。

参数:

  • texts:文本列表
  • k:返回关键词的个数
  • stopword:是否去除停用词
  • allowPOS:配置允许的词性
  • n_jobs: 线程 worker 数


结果返回:

  • generator


示例:

>>> import xmnlp
>>> docs = ["""自然语言处理: 是人工智能和语言学领域的分支学科。\n在这此领域中探讨
    ...: 如何处理及运用自然语言;自然语言认知则是指让电脑“懂”人类的语言。 \n自然语言
    ...: 生成系统把计算机数据转化为自然语言。自然语言理解系统把自然语言转化为计算机
    ...: 程序更易于处理的形式。""",
    ...:    """xmnlp 是一款开源的轻量级中文自然语言处理工具🔧。  功能涵盖:中文分词、词
    ...: 性标注、命名体识别、文本纠错,情感识别,文本转拼音、提取文本部首等。  如果
    ...: 您有什么建议/疑问欢迎联系我 [email protected]"""]
>>> print(list(xmnlp.keyphrase_parallel(docs, k=2)))
[['自然语言理解系统把自然语言转化为计算机程序更易于处理的形式', '自然语言生成系统把计算机数据转化为自然语言'], ['如果您有什么建议/疑问欢迎联系我[email protected]', '文本转拼音、提取文本部首等']]

xmnlp.sentiment(text: str) -> Tuple[float, float]


情感识别,基于电商评论语料训练,适用于电商场景下的情感识别。

参数:

  • text:输入文本


结果返回:

  • 元组,格式为:[负向情感概率,正向情感概率]


示例:

>>> import xmnlp
>>> text = "这本书真不错,下次还要买"
>>> print(xmnlp.sentiment(text))
(0.02727833203971386, 0.9727216958999634)

xmnlp.sentiment_parallel(texts: List[str], n_jobs=2) -> Generator[Tuple[float, float], None, None]


并行处理情感识别。

参数:

  • texts:文本列表
  • n_jobs: 线程 worker 数


结果返回:

  • generator


示例:

>>> import xmnlp
>>> texts = ["这本书真不错,下次还要买", "垃圾书一本"]
>>> print(list(xmnlp.sentiment_parallel(text)))
[(0.02727833203971386, 0.9727216958999634),
 (0.9930351972579956, 0.006964794360101223)]

xmnlp.pinyin(text: str) -> List[str]


文本转拼音

参数:

  • text:输入文本


结果返回:

  • 拼音组成的列表


示例:

>>> import xmnlp
>>> text = "自然语言处理"
>>> print(xmnlp.pinyin(text))
['Zi', 'ran', 'yu', 'yan', 'chu', 'li']

xmnlp.pinyin_parallel(texts: List[str], n_jobs=2) -> Generator[List[str], None, None]


并行处理文本转拼音。

参数:

  • texts:文本列表
  • n_jobs: 线程 worker 数


结果返回:

  • generator


示例:

>>> import xmnlp
>>> texts = ["自然语言处理", "人工智能"]
>>> print(list(xmnlp.pinyin_parallel(text)))
[['Zi', 'ran', 'yu', 'yan', 'chu', 'li'], ['ren', 'gong', 'zhi', 'neng']]

xmnlp.radical(text: str) -> List[str]


提取文本部首

参数:

  • text:输入文本


结果返回:

  • 部首组成的列表


示例:

>>> import xmnlp
>>> text = "自然语言处理"
>>> print(xmnlp.radical(text))
['自', '灬', '讠', '言', '夂', '王']

xmnlp.radical_parallel(texts: List[str], n_jobs=2) -> Generator[List[str], None, None]


并行处理文本部首提取。

参数:

  • texts:文本列表
  • n_jobs: 线程 worker 数


结果返回:

  • generator


示例:

>>> import xmnlp
>>> texts = ["自然语言处理", "人工智能"]
>>> print(list(xmnlp.radical_parallel(text)))
[['自', '灬', '讠', '言', '夂', '王'], ['人', '工', '日', '月']]

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]]]]:


文本纠错

参数:

  • text:输入文本
  • suggest:是否返回建议词
  • k:返回建议词的个数
  • max_k:拼音搜索最大次数(建议保持默认值)


结果返回:

  • suggest 为 False 时返回 (错词下标,错词) 列表;suggest 为 True 时返回字典,字典键为(错词下标,错词) 列表,值为建议词以及权重列表。


示例:

>>> import xmnlp
>>> text = "不能适应体育专业选拔人材的要求"
>>> print(xmnlp.checker(text))
{(11, '材'): [('才', 1.58528071641922), ('材', 1.0009655653266236), ('裁', 1.0000178480604518), ('员', 0.35814568400382996), ('士', 0.011077565141022205)]}

xmnlp.checker_parallel(texts: List[str], suggest: bool = True, k: int = 5, max_k: int = 200, n_jobs: int = 2) -> Generator[ Union[List[Tuple[int, str]], Dict[Tuple[int, str], List[Tuple[str, float]]] ], None, None]:


并行处理文本纠错。

参数:

  • texts:文本列表
  • suggest:是否返回建议词
  • k:返回建议词的个数
  • max_k:拼音搜索最大次数(建议保持默认值)
  • n_jobs: 线程 worker 数


结果返回:

  • generator


示例:

>>> import xmnlp
>>> texts = ['开展公共资源交易活动监督检查和举报投拆处理。', '不能适应体育专业选拔人材的要求。', '比对整治前后影相资料。', '保护好堪查现场。']
>>> print(list(xmnlp.checker_parallel(text)))
[{(18, '拆'): [('资', 0.41119733452796936), ('诉', 0.21499130129814148), ('票', 0.11507325619459152), ('入', 0.07330290228128433), ('明', 0.009785536676645279)]}, {(11, '材'): [('才', 1.58528071641922), ('材', 1.0009655653266236), ('裁', 1.0000178480604518), ('员', 0.35814568400382996), ('士', 0.011077565141022205)]}, {(7, '相'): [('响', 1.1048823446035385), ('像', 1.0515491589903831), ('相', 1.000226703719818), ('乡', 1.0002082456485368), ('的', 0.29209405183792114)]}, {(3, '堪'): [('看', 1.0040899985469878), ('勘', 1.00186610117089), ('检', 0.16447395086288452), ('调', 0.1378173977136612), ('考', 0.0857236310839653)]}]

三. 更多

关于贡献者


期待更多小伙伴的 contributions,一起打造一款简单易用的中文 NLP 工具

学术引用 Citation

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

需求定制


本人致力于 NLP 研究和落地,方向包括:信息抽取,情感分类等。

其他 NLP 落地需求可以联系 [email protected] (此为有偿服务,xmnlp 相关的 bug 直接提 issue)

交流群


搜索公众号 xmnlp-ai 关注,菜单选择 “交流群” 入群。

Reference


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

  • 词法分析,文本纠错:人民日报语料
  • 情感识别:ChineseNlpCorpus

License


Apache 2.0

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].