導航:首頁 > 編程語言 > pythoncrf工具包

pythoncrf工具包

發布時間:2022-12-06 04:29:53

❶ hanlp可以使用python調用嗎

安裝JDK

JPype並沒有像IKVM那樣實現自己的JVM,而是以pipe方式調用原生JVM。所以我們需要一個JVM,比如:

Oracle JDK

OpenJDK

安裝JDK非常簡單,分清楚32位和64位即可,必須與OS和Python的位數一致,具體安裝過程不再贅述。

唯一需要注意的是,必須設置環境變數java_HOME到JDK的根目錄,JDK的安裝程序不一定會幫你做這一步。

安裝編譯工具鏈

Python的package一般是以源碼形式發布的,其中一些C代碼必須在用戶機器上編譯,所以需要安裝編譯工具鏈。當然你也可以跳過這步,直接下載binary。

Windows

安裝免費的Visual C++ Express 2010。

Debian/Ubuntu
sudo apt-get install g++

Red Hat/Fedora
su -c 'yum install gcc-c++'

安裝JPype

本文讀者應該都是Python程序員,所以略過了安裝Python這一步。不過必須注意的是,JPype版本與Python的對應兼容關系:

Python2.x:JPype

Python3.x:JPype1-py3

使用setup.py安裝

下載源碼後解壓,在目錄下運行:

*nix
sudo python3 setup.py install

Windows
python setup.py install

直接下載binary

當然你也可以選擇下載binary,比如JPype1-py3主頁上的binary列表。

在Pycharm中安裝

如果你正在使用Pycharm這款IDE的話,那麼事情就簡單多了。

首先在Project Interpreter裡面點擊加號:

搜索JPype,選擇你需要的版本安裝:

稍等片刻就安裝成功了:

測試安裝結果

終於又到了寫代碼的開心時間了,可以通過如下代碼測試是否安裝成功:
from jpype import *startJVM(getDefaultJVMPath())java.lang.System.out.println("hello world")shutdownJVM()

輸出如下結果表示安裝成功:
hello worldJVM activity report : classes loaded : 31JVM has been shutdown

調用HanLP

關於HanLP

HanLP是
一個致力於向生產環境普及NLP技術的開源Java工具包,支持中文分詞(N-最短路分詞、CRF分詞、索引分詞、用戶自定義詞典、詞性標注),命名實體
識別(中國人名、音譯人名、日本人名、地名、實體機構名識別),關鍵詞提取,自動摘要,短語提取,拼音轉換,簡繁轉換,文本推薦,依存句法分析
(MaxEnt依存句法分析、神經網路依存句法分析)。

下載HanLP

你可以直接下載Portable版的jar,零配置。

也可以使用自定義的HanLP——HanLP由3部分組成:類庫hanlp.jar包、模型data包、配置文件hanlp.properties,請前往項目主頁下載最新版:https://github.com/hankcs/HanLP/releases。對於非portable版,下載後,你需要編輯配置文件第一行的root指向data的父目錄,詳見文檔。

這里,假設新建了一個目錄(假定為C:\hanlp),把hanlp.jar和hanlp.properties(portable版的話,僅需一個hanlp-portable.jar)放進去:

Python調用

下面是一份Python3的調用示例:
# -*- coding:utf-8 -*-
# Filename: main.py
# Author:hankcs
# Date: 2015/11/26 14:16
from jpype import *

startJVM(getDefaultJVMPath(), "-Djava.class.path=C:\hanlp\hanlp-1.2.8.jar;C:\hanlp", "-Xms1g", "-Xmx1g")
HanLP = JClass('com.hankcs.hanlp.HanLP')
# 中文分詞
print(HanLP.segment('你好,歡迎在Python中調用HanLP的API'))
testCases = [
"商品和服務",
"結婚的和尚未結婚的確實在干擾分詞啊",
"買水果然後來世博園最後去世博會",
"中國的首都是北京",
"歡迎新老師生前來就餐",
"工信處女幹事每月經過下屬科室都要親口交代24口交換機等技術性器件的安裝工作",
"隨著頁游興起到現在的頁游繁盛,依賴於存檔進行邏輯判斷的設計減少了,但這塊也不能完全忽略掉。"]
for sentence in testCases: print(HanLP.segment(sentence))
# 命名實體識別與詞性標注
NLPTokenizer = JClass('com.hankcs.hanlp.tokenizer.NLPTokenizer')
print(NLPTokenizer.segment('中國科學院計算技術研究所的宗成慶教授正在教授自然語言處理課程'))
# 關鍵詞提取
document = "水利部水資源司司長陳明忠9月29日在國務院新聞辦舉行的新聞發布會上透露," \
"根據剛剛完成了水資源管理制度的考核,有部分省接近了紅線的指標," \
"有部分省超過紅線的指標。對一些超過紅線的地方,陳明忠表示,對一些取用水項目進行區域的限批," \
"嚴格地進行水資源論證和取水許可的批准。"
print(HanLP.extractKeyword(document, 2))
# 自動摘要
print(HanLP.extractSummary(document, 3))
# 依存句法分析
print(HanLP.parseDependency("徐先生還具體幫助他確定了把畫雄鷹、松鼠和麻雀作為主攻目標。"))
shutdownJVM()

❷ crf++在windows下怎麼運行

把你下載的CRF++的工具包裡面的crf_learn.exe,crf_test.exe 和libcrfpp.dll文件復制到你這個目錄下面就可以調用了該命令了。

❸ Python類庫豐富但不支持中文

編碼問題。
調用路徑的那個函數默認用unicode。可以試試新建文本,文本保存時選擇編碼gbk系列的。然後重新輸入代碼,寫coding是gbk。然後使用unicode(path,gbk)。
jieba是中文分詞工具。snownlp,用於處理中文文本庫。loso是中文分詞函數庫。genius是中文CRF基礎庫。

❹ python 命名實體識別怎麼計算準確率 召回率

目前演算法方面主流就是CRF了
效率一般
2類(不包括非專名)
幾W
query/s
4類
就下降到1W-2W
query/s了
更多類別的就更少了
當然這個是優化過的crf++了
而且命名實體識別
演算法不是對所有類別的都合適
比如音樂和電影
CRF的效果就不好
但是人名
地名
機構名還不錯
所以工程上即使用CRF
也會使用詞典+消歧的策略

❺ 安裝Python的crf++時候遇到的錯誤

第一步 你會缺少crfpp.h,直接從/CRF++-0.58目錄下復制過來就行
第二步 你會缺少crfpp.lib 需要自己vs編譯生成比較麻煩 我已生成好了,可直接使用
第三步 你會缺少pthread.lib 也是直接提供文件下載就行
第四步 python setup.py build
python setup.py install
正常運行,但import CRFPP調用時提示缺少dll,此時復制windows包下的/CRF++-0.58的libcrfpp.dll到python\Lib\site-packages目錄下即可
此時配置完成

❻ 有誰用過crf++或crfsuite工具包嗎,python上用的,win7系統

文檔上不是有說明嗎?有SWIG interface的版本。在它的例子目錄里有chunking.py, pos.py, ner.py, template.py等。你自己挑一個試試不就成了。


在swig/python目錄里有一個readme,你參考著做一次編譯就可以成生。

#!/usr/bin/envpython

importcrfsuite
importsys

#Inheritcrfsuite.Trainertoimplementmessage()function,whichreceives
#.
classTrainer(crfsuite.Trainer):
defmessage(self,s):
#.
sys.stdout.write(s)

definstances(fi):
xseq=crfsuite.ItemSequence()
yseq=crfsuite.StringList()

forlineinfi:
line=line.strip(' ')
ifnotline:
#.
yieldxseq,tuple(yseq)
xseq=crfsuite.ItemSequence()
yseq=crfsuite.StringList()
continue

#SplitthelinewithTABcharacters.
fields=line.split(' ')

#Appendattributestotheitem.
item=crfsuite.Item()
forfieldinfields[1:]:
p=field.rfind(':')
ifp==-1:
#Unweighted(weight=1)attribute.
item.append(crfsuite.Attribute(field))
else:
#Weightedattribute
item.append(crfsuite.Attribute(field[:p],float(field[p+1:])))

#.
xseq.append(item)
#.
yseq.append(fields[0])

if__name__=='__main__':
#.
printcrfsuite.version()

#CreateaTrainerobject.
trainer=Trainer()

#,andsetthemtotrainer.
forxseq,yseqininstances(sys.stdin):
trainer.append(xseq,yseq,0)

#UseL2-regularizedSGDand1st-orderdyadfeatures.
trainer.select('l2sgd','crf1d')

#.
fornameintrainer.params():
printname,trainer.get(name),trainer.help(name)

#.1
trainer.set('c2','0.1')

#Starttraining;.message()
#toreporttheprogress.
trainer.train(sys.argv[1],-1)





❼ 有哪位用過python的CRFsuite工具包么python2.7,Windows系統,測試文件運行不成功,應該怎麼使用

在swig/python目錄里有一個readme,你參考著做一次編譯就可以成生。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68

#!/usr/bin/env python

import crfsuite
import sys

# Inherit crfsuite.Trainer to implement message() function, which receives
# progress messages from a training process.
class Trainer(crfsuite.Trainer):
def message(self, s):
# Simply output the progress messages to STDOUT.
sys.stdout.write(s)

def instances(fi):
xseq = crfsuite.ItemSequence()
yseq = crfsuite.StringList()

for line in fi:
line = line.strip('\n')
if not line:
# An empty line presents an end of a sequence.
yield xseq, tuple(yseq)
xseq = crfsuite.ItemSequence()
yseq = crfsuite.StringList()
continue

# Split the line with TAB characters.
fields = line.split('\t')

# Append attributes to the item.
item = crfsuite.Item()
for field in fields[1:]:
p = field.rfind(':')
if p == -1:
# Unweighted (weight=1) attribute.
item.append(crfsuite.Attribute(field))
else:
# Weighted attribute
item.append(crfsuite.Attribute(field[:p], float(field[p+1:])))

# Append the item to the item sequence.
xseq.append(item)
# Append the label to the label sequence.
yseq.append(fields[0])

if __name__ == '__main__':
# This demonstrates how to obtain the version string of CRFsuite.
print crfsuite.version()

# Create a Trainer object.
trainer = Trainer()

# Read training instances from STDIN, and set them to trainer.
for xseq, yseq in instances(sys.stdin):
trainer.append(xseq, yseq, 0)

# Use L2-regularized SGD and 1st-order dyad features.
trainer.select('l2sgd', 'crf1d')

# This demonstrates how to list parameters and obtain their values.
for name in trainer.params():
print name, trainer.get(name), trainer.help(name)

# Set the coefficient for L2 regularization to 0.1
trainer.set('c2', '0.1')

# Start training; the training process will invoke trainer.message()
# to report the progress.
trainer.train(sys.argv[1], -1)

❽ Python中文分詞的原理你知道嗎

中文分詞,即 Chinese Word Segmentation,即將一個漢字序列進行切分,得到一個個單獨的詞。表面上看,分詞其實就是那麼回事,但分詞效果好不好對信息檢索、實驗結果還是有很大影響的,同時分詞的背後其實是涉及各種各樣的演算法的。

中文分詞與英文分詞有很大的不同,對英文而言,一個單詞就是一個詞,而漢語是以字為基本的書寫單位,詞語之間沒有明顯的區分標記,需要人為切分。根據其特點,可以把分詞演算法分為四大類:

基於規則的分詞方法

基於統計的分詞方法

基於語義的分詞方法

基於理解的分詞方法

下面我們對這幾種方法分別進行總結。

基於規則的分詞方法

這種方法又叫作機械分詞方法、基於字典的分詞方法,它是按照一定的策略將待分析的漢字串與一個「充分大的」機器詞典中的詞條進行匹配。若在詞典中找到某個字元串,則匹配成功。該方法有三個要素,即分詞詞典、文本掃描順序和匹配原則。文本的掃描順序有正向掃描、逆向掃描和雙向掃描。匹配原則主要有最大匹配、最小匹配、逐詞匹配和最佳匹配。

最大匹配法(MM)。基本思想是:假設自動分詞詞典中的最長詞條所含漢字的個數為 i,則取被處理材料當前字元串序列中的前 i 個字元作為匹配欄位,查找分詞詞典,若詞典中有這樣一個 i 字詞,則匹配成功,匹配欄位作為一個詞被切分出來;若詞典中找不到這樣的一個 i 字詞,則匹配失敗,匹配欄位去掉最後一個漢字,剩下的字元作為新的匹配欄位,再進行匹配,如此進行下去,直到匹配成功為止。統計結果表明,該方法的錯誤率 為 1/169。

逆向最大匹配法(RMM)。該方法的分詞過程與 MM 法相同,不同的是從句子(或文章)末尾開始處理,每次匹配不成功時去掉的是前面的一個漢字。統計結果表明,該方法的錯誤率為 1/245。

逐詞遍歷法。把詞典中的詞按照由長到短遞減的順序逐字搜索整個待處理的材料,一直到把全部的詞切分出來為止。不論分詞詞典多大,被處理的材料多麼小,都得把這個分詞詞典匹配一遍。

設立切分標志法。切分標志有自然和非自然之分。自然切分標志是指文章中出現的非文字元號,如標點符號等;非自然標志是利用詞綴和不構成詞的詞(包 括單音詞、復音節詞以及象聲詞等)。設立切分標志法首先收集眾多的切分標志,分詞時先找出切分標志,把句子切分為一些較短的欄位,再用 MM、RMM 或其它的方法進行細加工。這種方法並非真正意義上的分詞方法,只是自動分詞的一種前處理方式而已,它要額外消耗時間掃描切分標志,增加存儲空間存放那些非 自然切分標志。

最佳匹配法(OM)。此法分為正向的最佳匹配法和逆向的最佳匹配法,其出發點是:在詞典中按詞頻的大小順序排列詞條,以求縮短對分詞詞典的檢索時 間,達到最佳效果,從而降低分詞的時間復雜度,加快分詞速度。實質上,這種方法也不是一種純粹意義上的分詞方法,它只是一種對分詞詞典的組織方式。OM 法的分詞詞典每條詞的前面必須有指明長度的數據項,所以其空間復雜度有所增加,對提高分詞精度沒有影響,分詞處理的時間復雜度有所降低。

此種方法優點是簡單,易於實現。但缺點有很多:匹配速度慢;存在交集型和組合型歧義切分問題;詞本身沒有一個標準的定義,沒有統一標準的詞集;不同詞典產生的歧義也不同;缺乏自學習的智能性。

基於統計的分詞方法

該方法的主要思想:詞是穩定的組合,因此在上下文中,相鄰的字同時出現的次數越多,就越有可能構成一個詞。因此字與字相鄰出現的概率或頻率能較好地反映成詞的可信度。可以對訓練文本中相鄰出現的各個字的組合的頻度進行統計,計算它們之間的互現信息。互現信息體現了漢字之間結合關系的緊密程度。當緊密程 度高於某一個閾值時,便可以認為此字組可能構成了一個詞。該方法又稱為無字典分詞。

該方法所應用的主要的統計模型有:N 元文法模型(N-gram)、隱馬爾可夫模型(Hiden Markov Model,HMM)、最大熵模型(ME)、條件隨機場模型(Conditional Random Fields,CRF)等。

在實際應用中此類分詞演算法一般是將其與基於詞典的分詞方法結合起來,既發揮匹配分詞切分速度快、效率高的特點,又利用了無詞典分詞結合上下文識別生詞、自動消除歧義的優點。

基於語義的分詞方法

語義分詞法引入了語義分析,對自然語言自身的語言信息進行更多的處理,如擴充轉移網路法、知識分詞語義分析法、鄰接約束法、綜合匹配法、後綴分詞法、特徵詞庫法、矩陣約束法、語法分析法等。

擴充轉移網路法

該方法以有限狀態機概念為基礎。有限狀態機只能識別正則語言,對有限狀態機作的第一次擴充使其具有遞歸能力,形成遞歸轉移網路 (RTN)。在RTN 中,弧線上的標志不僅可以是終極符(語言中的單詞)或非終極符(詞類),還可以調用另外的子網路名字分非終極符(如字或字串的成詞條件)。這樣,計算機在 運行某個子網路時,就可以調用另外的子網路,還可以遞歸調用。詞法擴充轉移網路的使用, 使分詞處理和語言理解的句法處理階段交互成為可能,並且有效地解決了漢語分詞的歧義。

矩陣約束法

其基本思想是:先建立一個語法約束矩陣和一個語義約束矩陣, 其中元素分別表明具有某詞性的詞和具有另一詞性的詞相鄰是否符合語法規則, 屬於某語義類的詞和屬於另一詞義類的詞相鄰是否符合邏輯,機器在切分時以之約束分詞結果。

基於理解的分詞方法

基於理解的分詞方法是通過讓計算機模擬人對句子的理解,達到識別詞的效果。其基本思想就是在分詞的同時進行句法、語義分析,利用句法信息和語義信息來處理歧義現象。它通常包括三個部分:分詞子系統、句法語義子系統、總控部分。在總控部分的協調下,分詞子系統可以獲得有關詞、句子等的句法和語義信息來對分詞歧義進行判斷,即它模擬了人對句子的理解過程。這種分詞方法需要使用大量的語言知識和信息。目前基於理解的分詞方法主要有專家系統分詞法和神經網路分詞法等。

專家系統分詞法

從專家系統角度把分詞的知識(包括常識性分詞知識與消除歧義切分的啟發性知識即歧義切分規則)從實現分詞過程的推理機中獨立出來,使知識庫的維護與推理機的實現互不幹擾,從而使知識庫易於維護和管理。它還具有發現交集歧義欄位和多義組合歧義欄位的能力和一定的自學習功能。

神經網路分詞法

該方法是模擬人腦並行,分布處理和建立數值計算模型工作的。它將分詞知識所分散隱式的方法存入神經網路內部,通過自學習和訓練修改內部權值,以達到正確的分詞結果,最後給出神經網路自動分詞結果,如使用 LSTM、GRU 等神經網路模型等。

神經網路專家系統集成式分詞法

該方法首先啟動神經網路進行分詞,當神經網路對新出現的詞不能給出准確切分時,激活專家系統進行分析判斷,依據知識庫進行推理,得出初步分析,並啟動學習機制對神經網路進行訓練。該方法可以較充分發揮神經網路與專家系統二者優勢,進一步提高分詞效率。

以上便是對分詞演算法的基本介紹。

閱讀全文

與pythoncrf工具包相關的資料

熱點內容
手機文件圖片怎麼解壓 瀏覽:655
分布式系統設計pdf 瀏覽:181
中軸線趨勢指標源碼 瀏覽:721
labview源碼代碼 瀏覽:61
15匹谷輪壓縮機圖片 瀏覽:818
bsp分割演算法 瀏覽:22
高手選股公式源碼 瀏覽:682
脆皮軟心球解壓視頻十分鍾 瀏覽:404
如何關閉蘋果app同步充值 瀏覽:766
視頻壓縮發送微信 瀏覽:856
程序員段子大全圖片 瀏覽:760
javaudp心跳 瀏覽:429
阿里賣家app如何分配詢盤 瀏覽:828
如何拔打中國移動人工伺服器 瀏覽:505
傳奇歸來為什麼連不上伺服器 瀏覽:555
壓縮機潤滑油在哪個位置工作 瀏覽:141
張翰解壓減幾 瀏覽:775
你好法語1教師用書pdf 瀏覽:486
手機解壓縮後文件在哪 瀏覽:472
linux內核框架 瀏覽:720