![](/img/trans.png)
[英]Add conjunction to grammar rule - NLTK parse into syntax tree in python
[英]Quick NLTK parse into syntax tree
我試圖將幾百個句子解析為他們的語法樹,我需要快速完成,問題是如果我使用NLTK然后我需要定義一個語法,我不知道我只知道它將是英語。 我嘗試使用這個統計解析器,它適用於我的目的,但速度可能會好很多,有沒有辦法使用沒有語法的nltk解析? 在這個片段中,我使用處理池來“並行”進行處理,但速度還有很多不足之處。
import pickle
import re
from stat_parser.parser import Parser
from multiprocessing import Pool
import HTMLParser
def multy(a):
global parser
lst=re.findall('(\S.+?[.!?])(?=\s+|$)',a[1])
if len(lst)==0:
lst.append(a[1])
try:
ssd=parser.norm_parse(lst[0])
except:
ssd=['NNP','nothing']
with open('/var/www/html/internal','a') as f:
f.write("[[ss")
pickle.dump([a[0],ssd], f)
f.write("ss]]")
if __name__ == '__main__':
parser=Parser()
with open('/var/www/html/interface') as f:
data=f.read()
data=data.split("\n")
p = Pool(len(data))
Totalis_dict=dict()
listed=list()
h = HTMLParser.HTMLParser()
with open('/var/www/html/internal','w') as f:
f.write("")
for ind,each in enumerate(data):
listed.append([str(ind),h.unescape(re.sub('[^\x00-\x7F]+','',each))])
p.map(multy,listed)
解析是一項計算密集型操作。 您可以通過更精細的解析器獲得更好的性能,例如bllip 。 它是用c ++編寫的,並且受益於長期工作的團隊。 有一個與之交互的python模塊。
這是一個比較bllip和你正在使用的解析器的例子:
import timeit
# setup stat_parser
from stat_parser import Parser
parser = Parser()
# setup bllip
from bllipparser import RerankingParser
from bllipparser.ModelFetcher import download_and_install_model
# download model (only needs to be done once)
model_dir = download_and_install_model('WSJ', '/tmp/models')
# Loading the model is slow, but only needs to be done once
rrp = RerankingParser.from_unified_model_dir(model_dir)
sentence = "In linguistics, grammar is the set of structural rules governing the composition of clauses, phrases, and words in any given natural language."
if __name__=='__main__':
from timeit import Timer
t_bllip = Timer(lambda: rrp.parse(sentence))
t_stat = Timer(lambda: parser.parse(sentence))
print "bllip", t_bllip.timeit(number=5)
print "stat", t_stat.timeit(number=5)
它在我的電腦上運行速度快了大約10倍:
(vs)[jonathan@ ~]$ python /tmp/test.py
bllip 2.57274985313
stat 22.748554945
此外,還有一個關於將bllip解析器集成到NLTK的掛起請求: https : //github.com/nltk/nltk/pull/605
另外,你在你的問題中說:“我不知道我只知道它會成為英語”。 如果你的意思是它也需要解析其他語言,那將會復雜得多。 這些統計解析器在一些輸入上進行訓練,通常是在Penn TreeBanks中從WSJ解析的內容。 一些解析也會為其他語言提供訓練有素的模型,但您需要先識別語言,然后將適當的模型加載到解析器中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.