StanfordNlp解析器在第一句话停止

时间:2017-08-22 21:47:00

标签: python parsing stanford-nlp

我对python Stanford nlp有问题,句子解析并将其写入文件。 问题:我有几个句子的.txt文件和使用for循环我想解析所有句子。问题是使用StanfordCoreNlp解析只适用于第一句而不适用于所有。它只是停止解析和写作。

实施例: 档案(sentences2.txt): 1月早晨的清晨薄雾掩盖了一片遥远的太阳。在角落里,冬天寒冷的雪花飘落,四个孩子在兴奋的会议中喋喋不休。他们不小心冷,穿着不适合冰冷的天气。他们在阴谋中咯咯地笑了起来,然后突然他们蜷缩在一起的团队在充满活力的繁荣中爆发。三个跑向不同的方向。这里有许多藏身之处,周围点缀着树木,灌木和石头。

代码:

from stanfordcorenlp import StanfordCoreNLP

nlp = StanfordCoreNLP(r"C:\Users\user\Downloads\stanford-corenlp-full-2017-06-09\stanford-corenlp-full-2017-06-09")

test_sent = open("C:/Users/user/Desktop/Test sentences2.txt", "r",
                    encoding="iso-8859-1")

output = open("C:/Users/user/Desktop/Output2.txt", "a", encoding="utf-8")
lines = test_sent.readlines()

for line in lines:
    output.write(nlp.parse(line))

test_sent2.close()
output2.close()

文件(output2.txt):

(ROOT
  (S
    (NP
      (NP (DT The) (RB still))
      (, ,)
      (NP
        (NP (NN chill) (NN mist))
        (PP (IN of)
          (NP (DT the) (NNP January) (NN morning)))))
    (VP (VBD veiled)
      (NP (DT a) (JJ remote) (NN sun)))
    (. .)))

1 个答案:

答案 0 :(得分:0)

如果文件内容与您发布的内容完全相同,则其中没有换行符,因此readlines()只返回一行,其中包含所有句子。 parse()在第一句话停止,因此您一次性将所有句子都给它,但它只解析第一句。

两个选项:

选项1:修复文件

在每个句子后插入换行符,这样可以解决您的问题。

选项2:更改代码

而不是使用parse()来电annotate()

lines = test_sent.read()

output.write(nlp.annotate(line))

您可以通过传递属性参数来选择注释器,语言和输出格式,如here所述。还建议增加分配给StanfordCoreNLP的内存:

nlp = StanfordCoreNLP(r'path_to_corenlp', memory='8g')