gpt4 book ai didi

python - 快速 NLTK 解析成语法树

转载 作者:太空狗 更新时间:2023-10-30 00:40:35 27 4
gpt4 key购买 nike

我正在尝试将数百个句子解析到它们的语法树中,我需要快速完成,问题是如果我使用 NLTK,那么我需要定义一个语法,而且我不知道我只知道它会是英语。我尝试使用 this统计解析器,它非常适合我的目的,但是速度可能会好很多,有没有办法在没有语法的情况下使用 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 解析的内容。一些解析也会为其他语言提供经过训练的模型,但您需要先识别语言,然后将适当的模型加载到解析器中。

关于python - 快速 NLTK 解析成语法树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24363145/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com