2014-02-25 2 views
0

현재 진행중인 파이썬 프로젝트에서 자연어 처리 성능을 최적화하려고합니다. 기본적으로 자바로 작성된 아파치 OpenNLP를 사용하기 위해 계산 집약적 인 부분을 아웃소싱하고 싶습니다.파이썬에서 Java 코드 호출하기

내 질문은 Java 기능/클래스을 내 파이썬 코드로 다시 연결하는 데 권장되는 방법은 무엇입니까? 내가 생각 한 세 가지 방법 C/C++ 바인딩 파이썬에서 다음 내 C 프로그램의 JVM을 내장을 사용하여

  • 이다. 이것은 내가 Python에 C 확장을 쓰는 것에 어느정도 익숙하지만, C가 중개자로만 기능하는 언어의 삼각형을 사용하는 것이 어떻게 든 이상하게 보일 수 없기 때문에 제가 향한 것입니다.

  • 자이툰을 사용합니다. 필자가 주로 염두에 두어야 할 점은 CPython은 내가 아는 한 압도적으로 인기있는 파이썬 구현이며, 다른 공동 작업자 또는 패키지와의 호환성을 파괴하고 싶지는 않습니다.

  • OpenNLP와 함께 제공되는바이너리에 입출력을 스트리밍합니다. Apache는 데이터를주고받을 수있는 독립 실행 형 바이너리와 같은 토큰 라이저를 제공합니다. 이것은 아마도 구현하기 가장 쉬운 선택 일 것이지만 또한 가장 원유처럼 보입니다.

내가 궁금하네요 경우 경험 인터페이스 파이썬을 가지고 자바의 성능이 옵션마다 다를 가능성이 얼마나 알고 있으며, 어느 것이 "추천"또는 이러한 상황에서 고려 가장 좋은 방법은 사람 - 또는 물론 내가 생각하지 못했던 완전히 다른 방법이 있다면.

나는 기존의 대답을 찾아서 찾았으므로 this을 찾았지만 3.5 년 전의 답변이며 죽어 있거나, 통합하기가 어렵고, 구성하기가 어렵거나 개발 중이거나 아직 개발중인 프로젝트를 언급합니다.

일부 의견은 세 가지 방법 모두에 대한 오버 헤드가 실제 NLP 코드를 실행하는 데 필요한 시간에 비해 중요하지 않다고 언급 한 의견이 있습니다. 이것은 사실 일지 모르지만 나는 더 일반적인 관점에서의 대답에 관심이 있습니다.

감사합니다.

+0

음, 여기는 바인딩의 성능이 정말 중요하지 않습니다 ... 대부분의 시간은 OepnNLP 자체에서 보냈 겠지요? – fge

+0

흠, 나도 몰라 - 당신이 말해 줄 :) 한가지 고려해야 할 것은 현재 코드는, 나는 한 번에 작은 덩어리의 텍스트를 처리하기 위해 OpenNLP를 자주 호출하기 때문에 바인딩 최적화를 생각할 수 있다고 생각한다. (물론 이론 상으로는 호출의 발생을 최소화하기 위해 기존 코드를 재구성하는 것이 가능할 것입니다.)이 시나리오 유형에 대한 "모범 사례"가 무엇인지 궁금합니다. – Moritz

+0

글쎄, _you_ tell this in this case;) 청크가 작고 신속하게 처리되면 그렇습니다. "언어 간 호출"의 오버 헤드는 실제로 고려해야 할 사항입니다. – fge

답변

0

기존의 언어 독립적 인 RPC 메카니즘 (thirift, ....)을 사용하여 Java 서버를 빌드하는 것을 고려하십시오. RPC 클라이언트로 python을 사용하여 서버와 통신하십시오.

관련 문제