2

次の方法で、Python コードから Java プログラムを呼び出しています。

subprocess.check_output(["java", "-classpath", "/Users/feralvam/Programas/semanticvectors-3.4/semanticvectors-3.4.jar:/Users/feralvam/Programas/lucene-3.5.0/lucene-core-3.5.0.jar:/Users/feralvam/Programas/lucene-3.5.0/contrib/demo/lucene-demo-3.5.0.jar:", "pitt.search.semanticvectors.CompareTerms", "-queryvectorfile","/Users/feralvam/termvectors.bin",term1,term2])

「term1」と「term2」は、UTF-8 エンコーディングのテキスト ファイルから読み取られる文字列です。

PyDev (Eclipse 3.7.2 のバージョン 2.5) からこのコマンドを実行すると、次の出力が得られます: (ここでは、"term1" = "Eles" および "term2" = "é")

Jun 26, 2012 11:20:55 AM pitt.search.semanticvectors.CompareTerms main
INFO: Opened query vector store from file: /Users/feralvam/termvectors.bin
Jun 26, 2012 11:20:55 AM pitt.search.semanticvectors.CompareTerms main
INFO: Couldn't open Lucene index at 
Jun 26, 2012 11:20:55 AM pitt.search.semanticvectors.CompareTerms main
INFO: No Lucene index for query term weighting, so all query terms will have same weight.
Didn't find vector for 'Eles'
No vector for 'Eles'
Didn't find vector for '??'
No vector for '??'
Jun 26, 2012 11:20:55 AM pitt.search.semanticvectors.CompareTerms main
INFO: Outputting similarity of "Eles" with "??" ...

しかし、ターミナルから同じコマンドを実行すると、次のようになります。

Jun 26, 2012 11:30:26 AM pitt.search.semanticvectors.CompareTerms main
INFO: Opened query vector store from file: /Users/feralvam/termvectors.bin
Jun 26, 2012 11:30:26 AM pitt.search.semanticvectors.CompareTerms main
INFO: Couldn't open Lucene index at 
Jun 26, 2012 11:30:26 AM pitt.search.semanticvectors.CompareTerms main
INFO: No Lucene index for query term weighting, so all query terms will have same weight.
Didn't find vector for 'Eles'
No vector for 'Eles'
Found vector for 'é'
Jun 26, 2012 11:30:26 AM pitt.search.semanticvectors.CompareTerms main
INFO: Outputting similarity of "Eles" with "é" ...

SemanticVector がどのように機能するかは別として、問題は、2 番目のケースでは「term2」が正しいエンコーディングで渡されることですが、最初のケースではそうはなりません。

ここで、次のコマンドを使用します。

print locale.getpreferredencoding(), sys.getdefaultencoding()

次の情報を取得します: US-ASCII utf-8 (PyDev 内) および UTF-8 ascii (ターミナル内)

したがって、引数を渡すためにUS-ASCIIエンコーディングを使用しているため、単語に適切なエンコーディングがないため、結果が間違っていると思います。ちなみにpython2.7を使っています。

これを変更する方法はありますか?

あなたが与えることができるどんな助けにも感謝します。

4

1 に答える 1

2

プロセスを開始するときに、LANG 環境変数にロケール名を渡すことができます。次のようにします。

env = os.environ.copy()
env['LANG'] = 'en_US.UTF-8'
subprocess.check_output( ..., env = env)
于 2012-06-26T10:53:22.347 に答える