我与用于标记句子的服务器交互。此服务器在端口上本地启动2020
。
例如,如果我通过下面使用的客户端Je mange des pâtes .
在端口上发送2020
,服务器会回答Je_CL mange_V des_P pâtes_N ._.
,结果总是只有一行,如果我的输入不为空,结果总是一行。
我目前必须通过此服务器标记 9 568 个文件。前 9 483 个文件按预期标记。之后,输入流似乎已关闭/已满/其他,因为IOError
当Broken Pipe
我尝试在stdin
.
当我跳过前 9 483 个第一个文件时,最后一个文件被标记为没有任何问题,包括导致第一个错误的文件。
我的服务器没有产生任何错误日志,表明发生了一些可疑的事情......我是否处理错误?一段时间后管道出现故障是否正常?
log = codecs.open('stanford-tagger.log', 'w', 'utf-8')
p1 = Popen(["java",
"-cp", JAR,
"edu.stanford.nlp.tagger.maxent.MaxentTaggerServer",
"-client",
"-port", "2020"],
stdin=PIPE,
stdout=PIPE,
stderr=log)
fhi = codecs.open(SUMMARY, 'r', 'utf-8') # a descriptor of the files to tag
for i, line in enumerate(fhi, 1):
if i % 500:
print "Tagged " + str(i) + " documents..."
tokens = ... # a list of words, can be quite long
try:
p1.stdin.write(' '.join(tokens).encode('utf-8') + '\n')
except IOError:
print 'bouh, I failed ;(('
result = p1.stdout.readline()
# Here I do something with result...
fhi.close()