NLP學(xué)習(xí)筆記0427
2、下載以下幾個(gè)文件
stanford-parser-full-2015-12-09??stanford-ner-2015-12-09
stanford-segmenter-2015-12-09?stanford-postagger-full-2015-12-09?
? 修改過(guò)的nltk?nltk-develop?????stanford-chinese-corenlp-2018-02-27-models??
前四個(gè)包是斯坦福提供的分析資源包,該工具的使用依賴(lài)于JAVA環(huán)境需要裝JDK 1.8 在此不贅述,nltk_develop,需要運(yùn)行其中的setup.py文件,忘了說(shuō)了,我的環(huán)境是python 36,運(yùn)行完成后在PYTHON36安裝目錄下的Lib文件夾里面的site-packages里面生成和nltk相關(guān)的3個(gè)文件夾,將??修改過(guò)的nltk下載下來(lái)之后覆蓋即可,最后一個(gè)chinese-corenlp則是資源文件
3、 斯坦福詞性標(biāo)注器安裝部署
????3.2、 斯坦福分詞操作
# -*- coding: utf-8 -*-
from nltk.tokenize.stanford_segmenter import StanfordSegmenter
data_dir = "D:\NLTK\stanford-segmenter-2015-12-09"
segmenter = StanfordSegmenter(
java_class='edu.stanford.nlp.ie.crf.CRFClassifier',
path_to_jar=data_dir + "\stanford-segmenter-3.6.0.jar",
path_to_slf4j=data_dir+"\slf4j-api.jar",
path_to_sihan_corpora_dict=data_dir+"\data",
path_to_model=data_dir+"\data\pku.gz",
path_to_dict=data_dir+"\data\dict-chris6.ser.gz"
)
sentence = u"這是斯坦福中文分詞器測(cè)試"
result = segmenter.segment(sentence)
print(result)
總結(jié)一定要注意path_to_slf4j路徑,否則會(huì)出現(xiàn)java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory,錯(cuò)誤
3.3 StanfordNERTagger? 英文命名實(shí)體識(shí)別
# -*- coding: utf-8 -*-
from nltk.tag import StanfordNERTagger
eng_tagger = StanfordNERTagger(
model_filename=r'D:NLTKstanford-ner-2015-12-09classifiersenglish.all.3class.distsim.crf.ser.gz',
path_to_jar=r'D:NLTKstanford-ner-2015-12-09stanford-ner.jar',
)
print(eng_tagger.tag('Rami Eid is studying at Stony Brook University in NY'.split()))
總結(jié):StanfordNERTagger沒(méi)有參數(shù)接收path_to_slf4j參數(shù),還是出現(xiàn)了java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory錯(cuò)誤修正方式:修改文件 C:Python36Libsite-packagesnltktagstanford.py文件的函數(shù)tag_sents在? ? ? stanpos_output, stderr 賦值處之前添加
_CLASS_PATH = "."
if os.environ.get('CLASSPATH') is not None:
_CLASS_PATH = os.environ.get('CLASSPATH')
stanpos_output, stderr = java(cmd, classpath=(self._stanford_jar, _CLASS_PATH), stdout=PIPE, stderr=PIPE)
如果之前已經(jīng)覆蓋過(guò)Lib里面的site-packages即可跳過(guò)當(dāng)前,這個(gè)方式的前提是在你電腦的環(huán)境變量上CLASSPATH添加slf4j-api.jar的絕對(duì)路徑即可
3.4中文命名實(shí)體
#對(duì)于chinese.misc.distsim.crf.ser.gz與chinese.misc.distsim.prop文件,將stanford-chinese-corenlp-2016-10-31-models.jar解壓可以找到。
# -*- coding: utf-8 -*-
from nltk.tag import StanfordNERTagger
result='四川省 成都 信息 工程 大學(xué) 我 在 博客 園 開(kāi) 了 一個(gè) 博客 , 我 的 博客 名叫 伏 草 惟 存 , 寫(xiě) 了 一些 自然語(yǔ)言 處理 的 文章 。rn'
chi_tagger = StanfordNERTagger(model_filename=r'D:NLTKstanford-chinese-corenlp-2018-02-27-modelsedustanfordnlpmodelsnerchinese.misc.distsim.crf.ser.gz',
path_to_jar=r'D:NLTKstanford-ner-2015-12-09stanford-ner.jar')
for word, tag in chi_tagger.tag(result.split()):
print(word,tag)
3.5詞性標(biāo)注StanfordPOSTagger 中文詞性標(biāo)注
# -*- coding: utf-8 -*-
from nltk.tag import StanfordPOSTagger
chi_tagger = StanfordPOSTagger(model_filename=r'D:NLTKstanford-postagger-full-2015-12-09modelschinese-distsim.tagger',
path_to_jar=r'D:NLTKstanford-postagger-full-2015-12-09stanford-postagger.jar')
result= '四川省 成都 信息 工程 大學(xué) 我 在 博客 園 開(kāi) 了 一個(gè) 博客 , 我 的 博客 名叫 伏 草 惟 存 , 寫(xiě) 了 一些 自然語(yǔ)言 處理 的 文章 。rn'
print(chi_tagger.tag(result.split()))
3.6中文語(yǔ)法分析
# -*- coding: utf-8 -*-
from nltk.parse.stanford import StanfordParser
chi_parser = StanfordParser(r"D:NLTKstanford-parser-full-2015-12-09stanford-parser.jar",
r"D:NLTKstanford-parser-full-2015-12-09stanford-parser-3.6.0-models.jar",
r"D:NLTKstanford-chinese-corenlp-2018-02-27-modelsedustanfordnlpmodelslexparserchinesePCFG.ser.gz")
sent = u'北海 已 成為 中國(guó) 對(duì)外開(kāi)放 中 升起 的 一 顆 明星'
print(list(chi_parser.parse(sent.split())))
3.7 中文依存句法分析
# -*- coding: utf-8 -*-
from nltk.parse.stanford import StanfordDependencyParser
chi_parser = StanfordDependencyParser(r"D:NLTKstanford-parser-full-2015-12-09stanford-parser.jar",
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? r"D:NLTKstanford-parser-full-2015-12-09stanford-parser-3.6.0-models.jar",
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? r"D:NLTKstanford-chinese-corenlp-2018-02-27-modelsedustanfordnlpmodelslexparserchinesePCFG.ser.gz")
res = list(chi_parser.parse(u'四川 已 成為 中國(guó) 西部 對(duì)外開(kāi)放 中 升起 的 一 顆 明星'.split()))
for row in res[0].triples():
? ? print(row)
說(shuō)明所有資料整理自?
【NLP】干貨!Python NLTK結(jié)合stanford NLP工具包進(jìn)行文本處理根據(jù)自己的環(huán)境進(jìn)行的修改,上述代碼可以正常運(yùn)行