pyltp的簡單使用


上一篇我們搭建了pyltp的基本環境,現在我們用簡單的示例來測試它的使用,因為還是新手,肯定會有很多不全面的地方,后面我慢慢補充。

我們采用PyCharm作為編輯器,進行示例。

0.    檢查pyltp

首先先檢查下python27/Lib/site-packages/目錄下是否存在pyltp的相關文件夾:

 

 
                    pyltp的安裝位置

1.    創建項目

    1.1 創建一個新的python項目

創建一個新的python項目,並取名為:firstLtp

注意更改PyCharm的以下設置,因為你的pyltp是安裝在這里的,所以如此設置你的pyltp才能夠正常使用:

 

 
                          新手注意~

1.2 創建src

在venv目錄下,創建src文件夾。

 
        如上

2.    基本組件的使用

    2.1 分詞模塊使用

(1)創建SentenceSplitterTest.py

# -- coding: utf-8 --**

#測試分句使用-SentenceSplitter

from pyltp import Sentence

Splittersentence = SentenceSplitter.split('測試分句,這是分句1。這是分句2。這個是,分句3。')

for i in range(len(sentence)):

    print i+1,':',sentence[i]

(2)獲得結果

C:\Python27\python.exe E:/for_study/PyCharmSpace/firstLtp/venv/src/SentenceSplitterTest.py

1 : 測試分句,這是分句1。

2 : 這是分句2。

3 : 這個是,分句3。

Process finished with exit code 0

    2.2 分詞使用

(1)SegmentorTest.py

# -- coding: utf-8 --**

#測試分詞使用 - Segmentor

import os

LTP_DATA_DIR = 'F:/zou/LTP/ltp_data/ltp_data' #v3.3.1報錯Segmentor: Model not loaded!,使用新版本模型v3.4.0運行成功

cws_model_path = os.path.join(LTP_DATA_DIR, 'cws.model') # 分詞模型路徑,模型名稱為‘cws.‘

from pyltp import Segmentorsegmentor = Segmentor() # 初始化實例

segmentor.load(cws_model_path) # 加載模型

words = segmentor.segment('歐幾里得是西元前三世紀的希臘數學家。') # 分詞

print ' '.join(words)segmentor.release() # 釋放模型,但是人名並未識別,以下方法可以識別出人名

path_name = 'F:/zou/LTP/Names-Corpus-master/Names-Corpus/testName.txt'segmentor = Segmentor() # 初始化實例

segmentor.load_with_lexicon(cws_model_path, path_name) # 加載模型地址,參數lexicon是自定義詞典的文件路徑

words = segmentor.segment('歐幾里得是西元前三世紀的希臘數學家。')print ' '.join(words)segmentor.release()

 

 

(2)獲得結果

C:\Python27\python.exe E:/for_study/PyCharmSpace/firstLtp/venv/src/SegmentorTest.py

歐 幾 里 得 是 西元前 三 世紀 的 希臘 數學家 。

[INFO] 2019-03-10 13:23:55 loaded 3 lexicon entries

歐幾里得 是 西元前 三 世紀 的 希臘 數學家 。

Process finished with exit code 0

                          將歐幾里得添加到用戶字典里,於是可以識別到歐幾里得為一個詞(人名),改善結果並提高准確率。

    2.3  詞性標注使用

(1)PostaggerTest.py

# -- coding: utf-8 --**

#測試詞性標注- Postagger

LTP_DATA_DIR ='F:/zou/LTP/ltp_data/ltp_data' #v3.3.1同樣報錯模型未加載,采用v3.4.0

import os

pos_model_path = os.path.join(LTP_DATA_DIR,'pos.model')# 詞性標注模型路徑,模型名稱為`pos.model`

from pyltpimport Postagger

postagger = Postagger()# 初始化實例

postagger.load(pos_model_path)# 加載模型

words = ['歐幾里得','是','西元前','三','世紀','的','希臘','數學家','。']

postags = postagger.postag(words)# 詞性標注

for iin range(len(words)):

print words[i],'(',

print postags[i],')',

postagger.release()# 釋放模型

(2)獲得結果

C:\Python27\python.exe E:/for_study/PyCharmSpace/firstLtp/venv/src/PostaggerTest.py

歐幾里得 ( nh ) 是 ( v ) 西元前 ( nt ) 三 ( m ) 世紀 ( n ) 的 ( u ) 希臘 ( ns ) 數學家 ( n ) 。 ( wp )

Process finished with exit code 0

詞性標注對應如下:附錄

 
                    863詞性標注集

    2.4 命名實體識別使用

(1)NamedEntityRecognizerTest.py

# -- coding: utf-8 --**

#命名實體識別測試- NamedEntityRecognizer

LTP_DATA_DIR ='F:/zou/LTP/ltp_data/ltp_data' #v3.3.1同樣報錯模型未加載,采用v3.4.0

import os

ner_model_path = os.path.join(LTP_DATA_DIR,'ner.model')# 命名實體識別模型路徑,模型名稱為`ner.model`

from pyltpimport NamedEntityRecognizer

recognizer = NamedEntityRecognizer()# 初始化實例

recognizer.load(ner_model_path)# 加載模型

words = ['歐幾里得','是','西元前','三','世紀','的','希臘','數學家','。']

postags = ['nh','v','nt','m','n','u','ns','n','wp']

nertags = recognizer.recognize(words, postags)# 命名實體識別

print ' '.join(nertags)

recognizer.release()# 釋放模型

(2)獲得結果

C:\Python27\python.exe E:/for_study/PyCharmSpace/firstLtp/venv/src/NamedEntityRecognizerTest.py

S-Nh O O O O O S-Ns O O

Process finished with exit code 0

 
NamedEntityRecognizer

    2.5 依存句法分析的使用

(1)ParserTest.py

# -- coding: utf-8 --**

#依存句法分析測試- Parser

LTP_DATA_DIR ='F:/zou/LTP/ltp_data/ltp_data' #v3.3.1同樣報錯模型未加載,采用v3.4.0

import os

par_model_path = os.path.join(LTP_DATA_DIR,'parser.model')# 依存句法分析模型路徑,模型名稱為`parser.model`

from pyltpimport Parser

parser = Parser()# 初始化實例

parser.load(par_model_path)# 加載模型

words = ['歐幾里得','是','西元前','三','世紀','的','希臘','數學家','。']

postags = ['nh','v','nt','m','n','u','ns','n','wp']

arcs = parser.parse(words, postags)# 句法分析

rely_id = [arc.headfor arcin arcs]# 提取依存父節點id

relation = [arc.relationfor arcin arcs]# 提取依存關系

heads = ['Root' if id ==0 else words[id-1]for idin rely_id]# 匹配依存父節點詞語

for iin range(len(words)):

print relation[i] +'(' + words[i] +', ' + heads[i] +')'

parser.release()# 釋放模型

(2)獲得結果

C:\Python27\python.exe E:/for_study/PyCharmSpace/firstLtp/venv/src/ParserTest.py

SBV(歐幾里得, 是)

HED(是, Root)

ATT(西元前, 世紀)

ATT(三, 世紀)

ATT(世紀, 數學家)

RAD(的, 世紀)

ATT(希臘, 數學家)

VOB(數學家, 是)

WP(。, 是)

Process finished with exit code 0

 
                     依存句法關系

示例代碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM