2013-06-12 22 views
1

我使用斯坦福解析器的命令行:斯坦福解析器的处理时间和存储器消耗

java -mx1500m -cp stanford-parser.jar;stanford-parser-models.jar edu.stanford.nlp.parser.lexparser.LexicalizedParser -outputFormat "penn" edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz {file} 

当我在单个句子运行命令与27个即,Java进程正在消耗的100MB内存和解析需要1.5秒。 当我用148个单词在单个句子上运行命令时,Java进程占用1.5GB的内存,解析需要1.5分钟。

我正在使用的机器是Windows 7与英特尔i5 2.53GH。

这些加工时间是否合理? 解析器是否有任何官方性能基准?

+1

(1)给出27个单词的1.5秒,这听起来很合理。你会期望可能的解析增加更多,每句更多的话。问题是你为什么用148个单词解析一个句子?自然语言处理可能不是一个很自然的句子。 (2)没有人喜欢对NLP工具进行基准测试,它体积庞大,除非您执行一些分布式计算技巧,否则不会是实时的。 – alvas

+0

同意@ 2er0:148可能是一个太长的句子。你能给我们判刑吗? – Renaud

+0

谢谢,@ 2er0和Renaud。 我想你回答了我的问题。我只是想验证1.5秒到27个字的句子是否合理,并且我没有做出完全错误的事情。 我同意148个单词的句子是不合理的。 我解析这么长的句子的原因是因为我有一个可以接收任何输入的系统。 当句子最后没有用点打断时,NLP引擎不能正确地分割它们 - 有时候我会得到如此长的句子。 –

回答

2

正如评论,你的问题在于句子分段,因为你的数据允许任何输入(有/没有适当的标点符号)。但不知何故,你有大写字母很好。因此,您可以尝试下面的配方,以大写形式分割句子。

免责声明:如果你一句I开始,然后在下面的配方没有什么帮助=)

“有些事情得改变它必须重新调整我很抱歉,我没有 意思是伤害我的小女孩它超出了我我无法承载重的世界的重量 所以晚安,晚安,晚安,晚安 晚安,晚安,晚安,晚安,晚安希望 事情运作好所有这么多的爱,这么多的学习但我 不会在那里教你哦,我知道我可以接近但我尝试我的 最好达到你我很抱歉我并不是故意伤害我的小女孩 女孩它超越了我,我无法承受沉重的世界的重量所以 晚安,晚安,晚安,晚安晚安,晚安,晚安, 晚安,晚安晚安,晚安,晚安晚安, 晚安希望事情顺利,yeah谢谢。 “后来

sentence = "Something gotta change It must be rearranged I'm sorry, I did not mean to hurt my little girl It's beyond me I cannot carry the weight of the heavy world So good night, good night, good night, good night Good night, good night, good night, good night, good night Hope that things work out all right So much to love, so much to learn But I won't be there to teach you Oh, I know I can be close But I try my best to reach you I'm so sorry I didn't not mean to hurt my little girl It's beyond me I cannot carry the weight of the heavy world So good night, good night, good night, good night Good night, good night, good night, good night Good night, good night, good night good night, good night Hope that things work out all right, yeah Thank you." 

temp = []; sentences = [] 
for i in sentence.split(): 
    if i[0].isupper() and i != "I": 
     sentences.append(" ".join(temp)) 
     temp = [i] 
    else: 
    temp.append(i) 
sentences.append(" ".join(temp)) 
sentences.pop(0) 
print sentences 

然后,按照这个Stanford Parser and NLTK解析了一句:

在Python中,你可以试试这个细分的句子。