1. 程式人生 > >哈工大語言云(LTP)本地安裝使用及Python呼叫

哈工大語言云(LTP)本地安裝使用及Python呼叫

轉載:http://blog.csdn.net/churximi/article/details/51174182

備註:本文實驗環境為64位win7系統,32位python2.7.11

1.LTP下載

Windows系統直接下載編譯好的二進位制檔案ltp-3.3.1-win-x86.zip,不用管編譯。

2.資料夾放置

(1)新建一個專案資料夾:D:\myprojects\LTP;

(2)將模型檔案解壓後的ltp_data資料夾放入專案資料夾;

(3)將ltp-3.3.1-win-x86.zip解壓後的dll、exe檔案全部拷入專案資料夾。

最後資料夾列表如下:


說明:因為內部預設路徑的關係,這樣放置可以使ltp_data資料夾處在預設路徑上。

3.Python使用ltp_test

LTP提供的模型包括:(在ltp_data資料夾)
    cws.model        分句模型,單檔案
    pos.model        詞性標註模型,單檔案
    ner.model命名實體識別模型,單檔案
    parser.model依存句法分析模型,單檔案
    srl_data/語義角色標註模型,多檔案(資料夾srl)

    ltp_test是一個整合LTP中各模組的命令列工具。它完成載入模型,依照指定方法執行分析的功能。

    主要引數:執行緒數、最終步驟、輸入檔案路徑、模型路徑、詞典路徑等。

    具體可通過CMD執行ltp_test.exe檢視。

python程式簡單呼叫:

[python] view plain copy  print?
  1. # -*- coding: utf-8 -*-
  2. """ 
  3. 學習:python執行CMD命令command,可以用&連線多個命令 
  4. 功能:python呼叫CMD命令來執行本地LTP功能 
  5. 時間:2016年4月13日 19:07:41 
  6. """
  7. import os  
  8. project_path = "d:\\myprojects\\LTP"# 專案資料夾目錄
  9. # 可設定ltp_test、(cws、pos、par、ner)_cmdline,但是注意各自能用的引數,沒有的引數請置空""
  10. model_exe = "ltp_test"# 又如cws_cmdline
  11. threads_num = " --threads "+str(3)                                    # 更改執行緒數
  12. last_stage = " --last-stage "+"all"# 最終步驟,可設定ws、pos、ner、dp、srl、all
  13. input_path = " --input "+"d:\\myprojects\\LTP\\file\\test.txt"# 輸入檔案
  14. seg_lexicon = ""                                                      # 分詞使用者詞典
  15. pos_lexicon = ""                                                      # 詞性標註使用者詞典
  16. output_path = "D:\\myprojects\\LTP\\result\\out.txt"# 輸出檔案
  17. command = "cd "+project_path+" & "+model_exe+threads_num+input_path+last_stage+" > "+output_path  
  18. os.system(command)  

4.Python使用xxx_cmdline

(1)cws_cmdline :分詞命令列 

(2)pos_cmdline :詞性標註命令列 

(3)par_cmdline :句法分析命令列

(4)ner_cmdline :命名實體識別命令列

python程式簡單呼叫(以cws_cmdline為例,其他類似,引數略不同)

[python] view plain copy  print?
  1. # -*- coding: utf-8 -*-
  2. """ 
  3. 功能:LTP本地分詞cws_cmdline,輸入文字需要每行一句。(不能自動分句) 
  4. 時間:2016年4月13日 20:22:39 
  5. """
  6. import os  
  7. project_path = "d:\\myprojects\\LTP"# 專案資料夾目錄
  8. model_exe = "cws_cmdline"# 分詞模組,相當於ltp_test的last_stage=ws,但是輸出格式不同
  9. threads_num = " --threads "+str(3)                                    # 更改執行緒數
  10. input_path = " --input "+"d:\\myprojects\\LTP\\file\\test.txt"# 輸入檔案
  11. seg_lexicon = " --segmentor-lexicon "+"D:\\myprojects\\LTP\\file\\seg_lexicon.txt"# 分詞使用者詞典
  12. output_path = "D:\\myprojects\\LTP\\result\\out.txt"# 輸出檔案
  13. command = "cd "+project_path+" & "+model_exe+threads_num+input_path+seg_lexicon+" > "+output_path  
  14. os.system(command)  

5.注意事項

(1)長度限制:為了防止輸入過長句子對穩定性造成影響,限制輸入字數少於1024字,分詞結果少於256詞。

(2)編碼:統一採用UTF-8

6.使用心得

(1)ltp_test輸出結果只有xml格式;(線上ltp-cloud api呼叫可以返回多種格式)
(2)ltp_test可以自動分句,遇到新的文字段落時,句子編號重新會從0開始(所以已經分好句的文字,輸出結果中的句子編號都是0)
(3)單獨使用某個功能模組時,需要事先分好句或者分好詞;(不同分析之間存在的依賴關係)
(4)#、&、+等特殊符號不會影響LTP本地分析;(線上ltp-cloud api呼叫會有影響);
(5)cws_cmdline分詞模組輸出結果為plain格式,分詞間隔用的是TAB製表符;
(6)pos_cmdline詞性標註模組輸出結果為plain格式,結果用TAB製表符分隔;詞與詞性之間以下劃線(_)連線。
(7)分詞使用者詞典問題:官方說“可以設定使用者詞典,但是ltp的分詞模組並非採用詞典匹配的策略,外部詞典以特徵方式加入機器學習演算法,並不能保證所有的詞都是按照詞典裡的方式進行切分。”

    例子:“C++”、“網際網路+”這樣的詞,加入詞典還是不能切分出來。

(8)一定要注意編碼問題:使用者詞典也要用UTF-8無BOM格式編碼,如果是UTF-8格式編碼,將導致第一行的詞不能被正確識別(因為存在位元組字首)。