這可能不是一個答案,但這裏有一些評論可能有幫助。
正如其名說,RutaRuleElementMatch商店規則元素,這是需要一個wihtin在RuleMatch以便確定行動的信息的匹配。在RuleMatch之後可以忘記這些信息,但有時需要存儲它。主要是,如果分析引擎配置爲調試(參數debug
和debugWithMacthes
),則會將其存儲。然後,爲了稍後創建調試註釋,將記住所有規則匹配和規則元素匹配。如果有很多匹配項,這可能會在當前實現中佔用大量內存。
調試配置也使用的Java API,例如,在Ruta.select()或Ruta.matches()英寸數量較少的情況下,這些匹配也會被記憶爲區塊報表的主要規則。
所以,如果調試被激活,應以減少內存使用停用。
400KB的文字相當多,我想。魯塔帶來了相當多的開銷,這是必需的,但也可以改進/減少。現在,直到實現得到改進,爲了處理ruta中的大型文檔,即減少內存使用量,有一些最佳實踐。
在您的使用情況下,我會切換到不同的播種機它創建只需要批註,並且只在您需要的,例如,你需要的空間和休息時間嗎?然後,我會重構規則。您在註釋中提到的示例規則效率極低,並生成許多RuleElementMatches。我建議儘可能使用字典查找,例如與TRIE
。您還可以通過限制匹配條件來改進此類規則。在你的例子中,這可能是W
或某些字典查找的輸出。
如果分析表明,大量的內存是由使用RutaRuleElementMatch,那麼這可以由調試配置引起的,或由低效的規則。
如果分析表明,大量的內存是由使用RutaBasic,那麼它是由文檔的大小引起的,並因此由註解的量。由於較少的覆蓋率信息需要存儲在內部列表/陣列中,因此減少註釋量有所幫助。至少在我的使用案例中,UNMARK
和UNMARKALL
也有幫助,但沒有達到預期的效果。還有參數lowMemoryProfile
,它可以減少RutaBasic的內存使用情況,但也會降低運行時性能,如您所述。不過,我想你的規則可以進行很多優化,以便參數再次成爲選項。
我希望這會有所幫助。
免責聲明:我是UIMA魯塔開發商
你使用哪種Java API中的一部分? –
你是什麼意思的REGEXP結構? REGEXP條件或簡單的正則表達式規則? UNAMRKALL行動有哪些規則?端點是什麼意思? –
我應該如何理解JavaAPI的問題?我們按照該API的文檔中所述構建AnalysisEngine,添加所需的所有類型系統,並使用流程方法推送文本以針對此引擎進行分析。 REGEX-Structures在我們組合規則的條件部分,就像下面的例子: **(ANY {REGEXP(「(H | h)ello」)} ANY {REGEXP(「(Mr. | Mrs 。)「)}){NOT(IS(問候語)) - > MARK(問候語)} ** –