文章にタグを付けるために使用するサーバーと対話します。このサーバーは、ポート でローカルに起動されます2020
。
たとえば、以下で使用されているクライアントを介してJe mange des pâtes .
ポートで送信すると、サーバーが応答し、結果は常に 1 行のみになり、入力が空でない場合は常に 1 行になります。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()