Author | |
---|---|
Victor | [email protected] |
Yinjun | [email protected] |
海蜇 | [email protected] |
通过pip
安装
pip install smoothnlp>=0.3.0
通过源代码安装最新版本
git clone https://github.com/smoothnlp/SmoothNLP.git
cd SmoothNLP
python setup.py install
仅支持SmoothNLP
V0.3.0
以后的版本.
from smoothnlp import kg
rels = kg.extract(text = ["SmoothNLP在V0.3版本中正式推出知识抽取功能",
"SmoothNLP专注于可解释的NLP技术",
"SmoothNLP支持Python与Java",
"SmoothNLP将帮助工业界与学术界更加高效的构建知识图谱",
"SmoothNLP是上海文磨网络科技公司的开源项目"]) ## 调用SmoothNLP解析
g = kg.rel2graph(rels) ## 依据文本解析结果, 生成networkx有向图
fig = kg.graph2fig(g,x=1000,y=1000) ## 生成 matplotlib.figure.Figure 图片
fig.savefig("SmoothNLP_KG_Demo.png") ## 保存图片到PNG
from smoothnlp import kg
kg.extract(text = "SmoothNLP在V0.3版本中正式推出知识抽取功能", pretty = True)
"""
对输入的 text 进行 知识图谱(N元组)抽取
:param text: 进行知识抽取的文本
支持格式-1: str, 超过一定长度的text会被自动切句
支持格式-2: [str], list of str
:param pretty: 是否对词组结果进行合并, 默认True
boolean: True/False
:return: 知识图谱(N-元组) -- List
字段:
subject: 对象1
object: 对象2
aciton: 连接关系
type: 连接类型
__conf_score: 置信概率
"""
>> [{'_conf_score': 0.9187054, 'action': '正式推出', 'object': '知识抽取功能', 'subject': 'SmoothNLP', 'type': 'action'}]
- 在V=0.3版本中, SmoothNLP的知识抽取模块仅支持包含"主语"对象的结构性关系抽取;
- 目前支持的关系:
动作事件
,状态修饰
,数字修饰
,条件修饰
; - 更多关系, 包括: "从属关系", "并列关系", "描述修饰"等 将在 V0.4中发布.
>> import smoothnlp
>> smoothnlp.segment('欢迎在Python中使用SmoothNLP')
['欢迎', '在', 'Python', '中', '使用', 'SmoothNLP']
>> smoothnlp.postag('欢迎使用smoothnlp的Python接口')
[{'token': '欢迎', 'postag': 'VV'},
{'token': '在', 'postag': 'P'},
{'token': 'Python', 'postag': 'NN'},
{'token': '中', 'postag': 'LC'},
{'token': '使用', 'postag': 'VV'},
{'token': 'SmoothNLP', 'postag': 'NN'}]
>> smoothnlp.ner("中国平安2019年度长期服务计划于2019年5月7日至5月14日通过二级市场完成购股" )
[{'charStart': 0, 'charEnd': 4, 'text': '中国平安', 'nerTag': 'COMPANY_NAME', 'sTokenList': {'1': {'token': '中国平安', 'postag': None}}, 'normalizedEntityValue': '中国平安'},
{'charStart': 4, 'charEnd': 9, 'text': '2019年', 'nerTag': 'NUMBER', 'sTokenList': {'2': {'token': '2019年', 'postag': 'CD'}}, 'normalizedEntityValue': '2019年'},
{'charStart': 17, 'charEnd': 26, 'text': '2019年5月7日', 'nerTag': 'DATETIME', 'sTokenList': {'8': {'token': '2019年5月', 'postag': None}, '9': {'token': '7日', 'postag': None}}, 'normalizedEntityValue': '2019年5月7日'},
{'charStart': 27, 'charEnd': 32, 'text': '5月14日', 'nerTag': 'DATETIME', 'sTokenList': {'11': {'token': '5月', 'postag': None}, '12': {'token': '14日', 'postag': None}}, 'normalizedEntityValue': '5月14日'}]
>> smoothnlp.company_recognize("旷视科技预计将在今年9月在港IPO")
[{'charStart': 0,
'charEnd': 4,
'text': '旷视科技',
'nerTag': 'COMPANY_NAME',
'sTokenList': {'1': {'token': '旷视科技', 'postag': None}},
'normalizedEntityValue': '旷视科技'}]
>> smoothnlp.number_recognize("百度移动应用的月活跃设备达11亿台")
[{'charStart': 13,
'charEnd': 16,
'text': '11亿',
'nerTag': 'NUMBER',
'sTokenList': {'9': {'token': '11亿', 'postag': 'm'}},
'normalizedEntityValue': '1100000000'}]
>> smoothnlp.money_recognize("百度市值跌破400亿美元")
[{'charStart': 6,
'charEnd': 12,
'text': '400亿美元',
'nerTag': 'MONEY',
'sTokenList': {'4': {'token': '400亿', 'postag': 'm'},
'5': {'token': '美元', 'postag': 'M'}},
'normalizedEntityValue': '$40000000000'}]
>> smoothnlp.parse_date("2018年一季度")
{'startDate': '2018-01-01', 'endDate': '2018-03-31'}
注意,
smoothnlp.dep_parsing
返回的Index=0
为 dummy的root
token.
smoothnlp.dep_parsing("特斯拉是全球最大的电动汽车制造商。")
> [{'relationship': 'top', 'dependentIndex': 2, 'targetIndex': 1},
{'relationship': 'root', 'dependentIndex': 0, 'targetIndex': 2},
{'relationship': 'dep', 'dependentIndex': 5, 'targetIndex': 3},
{'relationship': 'advmod', 'dependentIndex': 5, 'targetIndex': 4},
{'relationship': 'ccomp', 'dependentIndex': 2, 'targetIndex': 5},
{'relationship': 'cpm', 'dependentIndex': 5, 'targetIndex': 6},
{'relationship': 'amod', 'dependentIndex': 8, 'targetIndex': 7},
{'relationship': 'attr', 'dependentIndex': 2, 'targetIndex': 8},
{'relationship': 'attr', 'dependentIndex': 2, 'targetIndex': 9},
{'relationship': 'punct', 'dependentIndex': 2, 'targetIndex': 10}]
smoothnlp.split2sentences("句子1!句子2!")
> ['句子1!', '句子2!']
SmoothNLP 默认使用2个Thread进行服务调用;
from smoothnlp import config
config.setNumThreads(2)
from smoothnlp import config
config.setLogLevel("DEBUG") ## 设定日志级别
该功能我们目前仅支持商业化的解决方案支持, 与线上服务. 详情可联系 [email protected]
效果演示
[
{
"url": "https://36kr.com/p/5167309",
"title": "Facebook第三次数据泄露,可能导致680万用户私人照片泄露",
"pub_ts": 1544832000
},
{
"url": "https://www.pencilnews.cn/p/24038.html",
"title": "热点 | Facebook将因为泄露700万用户个人照片 面临16亿美元罚款",
"pub_ts": 1544832000
},
{
"url": "https://finance.sina.com.cn/stock/usstock/c/2018-12-15/doc-ihmutuec9334184.shtml",
"title": "Facebook再曝新数据泄露 6800万用户或受影响",
"pub_ts": 1544844120
}
]
吐槽: 新浪小编数据错误... 夸大事实, 真实情况Facebook并没有泄露6800万张照片
该功能我们目前仅支持商业化的解决方案支持, 与线上服务. 详情可联系 [email protected]; 线上服务支持API输出
效果
事件名称 | AUC | Precision |
---|---|---|
投资并购 | 0.996 | 0.982 |
企业合作 | 0.977 | 0.885 |
董监高管 | 0.982 | 0.940 |
营收报导 | 0.994 | 0.960 |
企业签约 | 0.993 | 0.904 |
商业拓展 | 0.968 | 0.869 |
产品报道 | 0.977 | 0.911 |
产业政策 | 0.990 | 0.879 |
经营不善 | 0.981 | 0.765 |
违规约谈 | 0.951 | 0.890 |
参考文献
- SmoothNLP通过云端微服务提供完整的REST文本解析及相关服务应用. 对于开源爱好者等一般用户, 目前我们提供qps<=5的服务支持; 对于商业用户, 我们提供部不受限制的云端账号或本地部署方案.
- 包括:切词,词性标注,依存句法分析等基础NLP任务由java代码实现, 在文件夹
smoothnlp_maven
下. 可通过maven
编译打包 - 如果您寻求商业化的NLP或知识图谱解决方案, 欢迎邮件至 [email protected]
- Python环境下, SmoothNP的所有功能通过公开的微服务方式对外数据. 对于本地支持,我们采用了基于
Jpype
的方案. 对应的jar包可基于本项目直接打包使用, 或联系我们提供下载链接. - 注意, 在0.2.20版本调整后, 以下基础Pipeline功能仅对字符串长度做出了限制(不超过200). 如对较长corpus进行处理, 请先试用
smoothnlp.split2sentences
进行切句预处理 - 知识图谱可视化部分默认支持字体
SimHei
,大多数环境下的matplotlib不支持中文字体, 我们提供字体包的下载链接; 您可以通过运行以下代码, 将Simhei
字体加载入matplotlib字体库
import matplotlib.pyplot as plt
import matplotlib.font_manager as font_manager
## 设置字体
font_dirs = ['simhei/']
font_files = font_manager.findSystemFonts(fontpaths=font_dirs)
font_list = font_manager.createFontList(font_files)
font_manager.fontManager.ttflist.extend(font_list)
plt.rcParams['font.family'] = "SimHei"
- 如果你对NLP相关算法或引用场景感兴趣, 但是却缺少实现数据, 我们提供免费的数据支持, 下载.
- 如果你是高校学生, 寻求
NLP
或知识图谱
相关的研究素材, 甚至是实习机会. 欢迎邮件到 [email protected]