【发布时间】:2014-06-23 09:59:49
【问题描述】:
我正在尝试将数百个句子解析到它们的语法树中,我需要快速完成,问题是如果我使用 NLTK,那么我需要定义一个语法,我不知道我只知道它会是英语。我尝试使用this 统计解析器,它非常适合我的目的,但是速度可能会好很多,有没有一种方法可以在没有语法的情况下使用 nltk 解析? 在这个 sn-p 中,我使用一个处理池来“并行”进行处理,但速度还有很多不足之处。
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)
【问题讨论】:
-
会不会是全局声明导致了延迟?也许我应该使用一个新的解析器对象?