我正在使用samppipe编写一个烧瓶应用程序来提取内容。我最初编写了samppipe提取作为脚本来提取网站内容但是当我尝试与我的api JVM集成时执行samppipe提取器时崩溃。这是我得到的错误https://github.com/misja/python-boilerpipe/issues/17 我也在github提出了一个问题
from boilerpipe.extract import Extractor
import unicodedata
class ExtractingContent:
@classmethod
def processingContent(self,sourceUrl,extractorType="DefaultExtractor"):
extractor = Extractor(extractor=extractorType, url=sourceUrl)
extractedText = extractor.getText()
if extractedText:
toNormalString = unicodedata.normalize('NFKD',extractedText).encode('ascii','ignore')
json_data = json.loads({"content": toNormalString, "url": sourceUrl , "status": "success", "publisher_id": "XXXXX", "content_count": str(len(toNormalString)) })
return json_data
else:
json_data = json.dumps({"response": {"message": "No data found", "url": sourceUrl , "status": "success", "content_count": "empty" }})
return json.loads(json_data)
这是我尝试集成Flask api的上述脚本,它使用flask-restful,sqlachemy,psql。我也更新了我的java,但没有解决问题.Java版本
java version "1.7.0_45"
javac 1.7.0_45
任何帮助将不胜感激
由于
答案 0 :(得分:4)
(我在https://github.com/misja/python-boilerpipe/issues/17写的内容的副本)
好的,我已经重现了这个错误:调用JVM的线程没有附加到它,因此对JVM内部的调用失败。 这个错误来自于samppipe(见下文)。
首先,猴子修补:在你在stackoverflow上发布的代码中,你只需要在创建提取器之前添加以下代码:
class ExtractingContent:
@classmethod
def processingContent(self,sourceUrl,extractorType="DefaultExtractor"):
print "State=", jpype.isThreadAttachedToJVM()
if not jpype.isThreadAttachedToJVM():
print "Needs to attach..."
jpype.attachThreadToJVM()
print "Check Attached=", jpype.isThreadAttachedToJVM()
extractor = Extractor(extractor=extractorType, url=sourceUrl)
关于samppipe:if threading.activeCount() > 1
第50行的检查boilerpipe/extractor/__init__.py
错误。
调用线程必须始终连接到JVM,即使只有一个。