本系列文章主要結合Python語言實現知識圖譜構建相關工程,具有一定創新性和實用性,非常希望各位博友交流討論,相互促進成長。第一篇文章主要介紹哈工大pyltp工具,包括安裝過程、中文分詞、詞性標注和實體識別等。
知識圖譜系列文章:
[知識圖譜實戰篇] 一.數據抓取之Python3抓取JSON格式的電影實體
[知識圖譜實戰篇] 二.Json+Seaborn可視化展示電影實體
[知識圖譜實戰篇] 三.Python提取JSON數據、HTML+D3構建基本可視化布局
[知識圖譜實戰篇] 四.HTML+D3+CSS繪制關系圖譜
[知識圖譜實戰篇] 五.HTML+D3添加鼠標響應事件顯示相關節點及邊
[知識圖譜實戰篇] 六.HTML+D3實現點擊節點顯示相關屬性及屬性值
[知識圖譜實戰篇] 七.HTML+D3實現關系圖譜搜索功能
[知識圖譜實戰篇] 八.HTML+D3繪制時間軸線及顯示實體
環境下載地址:https://download.csdn.net/download/eastmount/11226539
一.哈工大LTP
LTP(Language Technology Platform)中文為語言技術平臺,是哈工大社會計算與信息檢索研究中心開發的一整套中文語言處理系統。LTP制定了基于XML的語言處理結果表示,并在此基礎上提供了一整套自底向上的豐富而且高效的中文語言處理模塊(包括詞法、句法、語義等6項中文處理核心技術),以及基于動態鏈接庫(Dynamic Link Library,DLL)的應用程序接口,可視化工具,并且能夠以網絡服務的形式進行使用。
LTP開發文檔:https://ltp.readthedocs.io/zh_CN/latest/index.html
語言云LTP-Cloud:http://www.ltp-cloud.com/
模型下載地址:http://ltp.ai/download.html
在線演示案例如下圖所示:
![[Python知識圖譜] 一.哈工大pyltp安裝及中文分句、中文分詞、導入詞典基本用法_第1張圖片](https://img.it610.com/image/info8/c6fabaa208be439abba7923ad926059b.jpg)
![[Python知識圖譜] 一.哈工大pyltp安裝及中文分句、中文分詞、導入詞典基本用法_第2張圖片](https://img.it610.com/image/info8/7db3b33fa99f481ba0e7cefc46acacd7.jpg)
相信從事NLP、數據挖掘、知識圖譜等領域的博友都知道哈工大LTP、同義詞詞林這些工具,該系列文章也會介紹相關的知識,希望對您有所幫助。
下面補充另一個在線NLP分析系統:http://ictclas.nlpir.org/nlpir/
![[Python知識圖譜] 一.哈工大pyltp安裝及中文分句、中文分詞、導入詞典基本用法_第3張圖片](https://img.it610.com/image/info8/9453b1378e634d5284f0f781b619fe24.jpg)
![[Python知識圖譜] 一.哈工大pyltp安裝及中文分句、中文分詞、導入詞典基本用法_第4張圖片](https://img.it610.com/image/info8/33faf6724e2a4791aa811890c1478b7e.jpg)
![[Python知識圖譜] 一.哈工大pyltp安裝及中文分句、中文分詞、導入詞典基本用法_第5張圖片](https://img.it610.com/image/info8/363111615eb24737bac3e2660dc35c27.jpg)
二.pyltp終極安裝
下面介紹Windows10 Python環境下LTP的擴展包pyltp安裝過程。
1.常見錯誤
大家通常會調用 “pip install pyltp” 安裝該擴展包,但會遇到各種錯誤,下面介紹一種可行的方法。
2.安裝pyltp包
首先,安裝Python3.6環境,如下圖所示“python-3.6.7-amd64.exe”。
![[Python知識圖譜] 一.哈工大pyltp安裝及中文分句、中文分詞、導入詞典基本用法_第6張圖片](https://img.it610.com/image/info8/f546b429fc054e488f1fa32dc96c65bf.jpg)
接著,下載pyltp擴展包的whl文件至本地,調用CMD環境進行安裝,注意需要將所在文件的路徑寫清楚。
C:\Users\yxz\AppData\Local\Programs\Python\Python36\Scripts
pyltp
-
0.2
.1
-
cp35
-
cp35m
-
win_amd64
.
whl (對應Python3
.
5
版本)
pyltp
-
0.2
.1
-
cp36
-
cp36m
-
win_amd64
.
whl (對應Python3
.
6
版本)
pip install C
:
\Python36\Scripts\pyltp
-
0.2
.1
-
cp36
-
cp36m
-
win_amd64
.
whl
whl下載地址:https://download.csdn.net/download/qq_22521211/10460778
安裝過程下圖所示,此時表示pyltp安裝成功。
![[Python知識圖譜] 一.哈工大pyltp安裝及中文分句、中文分詞、導入詞典基本用法_第7張圖片](https://img.it610.com/image/info8/dc187cf996ee4d988457183cee284f10.jpg)
注意,如果報錯“error:Microsoft Visual C++ 9.0 is required”,則安裝下面exe文件。
![[Python知識圖譜] 一.哈工大pyltp安裝及中文分句、中文分詞、導入詞典基本用法_第8張圖片](https://img.it610.com/image/info8/35b7e4ad144b414e8a07abc8cb865646.jpg)
3.下載模型文件
最后需要下載模型文件,其下載地址為:
百度云
七牛云
本文下載3.4版本的模型,下載解壓如下圖所示:
![[Python知識圖譜] 一.哈工大pyltp安裝及中文分句、中文分詞、導入詞典基本用法_第9張圖片](https://img.it610.com/image/info8/4bff7a952582452abf81ac8072ad1271.jpg)
模型對應的說明如下圖所示:
![[Python知識圖譜] 一.哈工大pyltp安裝及中文分句、中文分詞、導入詞典基本用法_第10張圖片](https://img.it610.com/image/info8/c2f971aac125493e97676680df23eef6.jpg)
在編寫代碼時,需要導入指定文件夾中的模型,再進行中文分詞、詞性標注、命名實體識別、依存句法分析、語義角色標注等分析。例如:
#詞性標注
pdir
=
'AgriKG\\ltp\\pos.model'
pos
=
Postagger
(
)
pos
.
load
(
pdir
)
postags
=
pos
.
postag
(
word
)
#基于分詞得到的list將下詞性標注
postags
=
list
(
postags
)
print
(
u
"詞性:"
,
postags
)
分詞、詞性標注、句法分析一系列任務之間存在依賴關系。舉例來講,對于詞性標注,必須在分詞結果之上進行才有意義。LTP中提供的5種分析之間的依賴關系如下所示:
![[Python知識圖譜] 一.哈工大pyltp安裝及中文分句、中文分詞、導入詞典基本用法_第11張圖片](https://img.it610.com/image/info8/8a1966b9f9e148d9abaa1570f2284a2a.jpg)
講到這里,哈工大pyltp基本安裝成功,接下來將介紹它的基本用法。
基礎性文章,希望對入門者有所幫助。
三.中文分句和分詞
官方文檔:https://pyltp.readthedocs.io/zh_CN/latest/api.html#id13
實現原理:https://ltp.readthedocs.io/zh_CN/latest/theory.html#customized-cws-reference-label
1.中文分句
# -*- coding: utf-8 -*-
from
pyltp
import
SentenceSplitter
from
pyltp
import
Segmentor
from
pyltp
import
Postagger
from
pyltp
import
NamedEntityRecognizer
#分句
text
=
"貴州財經大學要舉辦大數據比賽嗎?那讓歐幾里得去問問看吧!其實是在貴陽花溪區吧。"
sents
=
SentenceSplitter
.
split
(
text
)
print
(
'\n'
.
join
(
sents
)
)
中文分句的輸出結果如下所示:
貴州財經大學要舉辦大數據比賽嗎?
那讓歐幾里得去問問看吧!
其實是在貴陽花溪區吧。
2.中文分詞
# -*- coding: utf-8 -*-
from
pyltp
import
SentenceSplitter
from
pyltp
import
Segmentor
from
pyltp
import
Postagger
from
pyltp
import
NamedEntityRecognizer
text
=
"貴州財經大學要舉辦大數據比賽嗎?那讓歐幾里得去問問看吧!其實是在貴陽花溪區吧。"
#中文分詞
segmentor
=
Segmentor
(
)
#初始化實例
segmentor
.
load
(
"AgriKG\\ltp\\cws.model"
)
#加載模型
words
=
segmentor
.
segment
(
text
)
#分詞
print
(
type
(
words
)
)
print
(
' '
.
join
(
words
)
)
segmentor
.
release
(
)
#釋放模型
輸出結果如下所示(人工換行):
<
class
'pyltp.VectorOfString'
>
貴州 財經 大學 要 舉辦 大 數據 比賽 嗎 ?
那 讓 歐 幾 里 得 去 問問 看 吧 !
其實 是 在 貴陽 花溪區 吧 。
此時的分詞效果并不理想,如 “大數據” 分為了“大”、“數據”,“歐幾里得”分為了“歐”、“幾”、“里”、“得”,“貴陽花溪區”分為了“貴陽”、“花溪區”等,故需要引入詞典進行更為準確的分詞。同時,返回值類型是native的VectorOfString類型,可以使用list轉換成Python的列表類型。
3.導入詞典中文分詞
pyltp 分詞支持用戶使用自定義詞典。分詞外部詞典本身是一個文本文件(plain text),每行指定一個詞,編碼同樣須為 UTF-8,比如“word”文件,如下圖所示:
![[Python知識圖譜] 一.哈工大pyltp安裝及中文分句、中文分詞、導入詞典基本用法_第12張圖片](https://img.it610.com/image/info8/fe08a3a3c9344adab44c780f42572c3a.jpg)
完整代碼如下所示:
# -*- coding: utf-8 -*-
from
pyltp
import
SentenceSplitter
from
pyltp
import
Segmentor
from
pyltp
import
Postagger
from
pyltp
import
NamedEntityRecognizer
ldir
=
'AgriKG\\ltp\\cws.model'
#分詞模型
dicdir
=
'word'
#外部字典
text
=
"貴州財經大學要舉辦大數據比賽嗎?那讓歐幾里得去問問看吧!其實是在貴陽花溪區吧。"
#中文分詞
segmentor
=
Segmentor
(
)
#初始化實例
segmentor
.
load_with_lexicon
(
ldir
,
'word'
)
#加載模型
words
=
segmentor
.
segment
(
text
)
#分詞
print
(
' '
.
join
(
words
)
)
#分詞拼接
words
=
list
(
words
)
#轉換list
print
(
u
"分詞:"
,
words
)
segmentor
.
release
(
)
#釋放模型
輸出結果如下所示,它將“大數據”、“歐幾里得”、“貴陽花溪區”進行了詞典匹配,再進行相關分詞,但是“貴州財經大學”仍然劃分為“貴州”、“財經”、“大學”。 Why?
貴州 財經 大學 要 舉辦 大數據 比賽 嗎 ?
那 讓 歐幾里得 去 問問 看 吧 !
其實 是 在 貴陽花溪區 吧 。
分詞
:
[
'貴州'
,
'財經'
,
'大學'
,
'要'
,
'舉辦'
,
'大數據'
,
'比賽'
,
'嗎'
,
'?'
,
'那'
,
'讓'
,
'歐幾里得'
,
'去'
,
'問問'
,
'看'
,
'吧'
,
'!'
,
'其實'
,
'是'
,
'在'
,
'貴陽花溪區'
,
'吧'
,
'。'
]
4.個性化分詞
個性化分詞是 LTP 的特色功能。個性化分詞為了解決測試數據切換到如小說、財經等不同于新聞領域的領域。 在切換到新領域時,用戶只需要標注少量數據。 個性化分詞會在原有新聞數據基礎之上進行增量訓練。 從而達到即利用新聞領域的豐富數據,又兼顧目標領域特殊性的目的。
pyltp 支持使用用戶訓練好的個性化模型。關于個性化模型的訓練需使用 LTP,詳細介紹和訓練方法請參考 個性化分詞 。在 pyltp 中使用個性化分詞模型的示例如下:
# -*- coding: utf-8 -*-
from
pyltp
import
CustomizedSegmentor
customized_segmentor
=
CustomizedSegmentor
(
)
#初始化實例
customized_segmentor
.
load
(
'基本模型'
,
'個性模型'
)
#加載模型
words
=
customized_segmentor
.
segment
(
'亞硝酸鹽是一種化學物質'
)
print
'\t'
.
join
(
words
)
customized_segmentor
.
release
(
)
你好!六月。
這些年通過CSDN認識了很多志同道合的朋友,也有很多編程領域的大佬,每天都感覺自己差距還很大,優秀的很多。很高興認識這些素未謀面的新朋友。靡不有初,鮮克有終,一起加油。coding~
(By:Eastmount 2019-06-05 深夜1點寫于金陽 https://blog.csdn.net/Eastmount )
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
