2015-06-09 102 views
1

在我的UIMA應用程序中,我有一些註釋器必須在某個註釋器運行後運行。首先,我想到了將這些註釋器聚合在一起,但我還有其他註釋器也依賴於此(和其他)註釋器,這使得聚合變得困難和/或不切實際。Annotator依賴關係:UIMA類型功能?

我讀過關於類型功能,如果我理解正確,告訴UIMA某些類型(註釋)必須存在,當用作Input Type時。我希望UIMA在運行沒有註釋器的流水線時會給我一些警告,這些註釋器有一些輸出類型被聲明爲使用的註釋器的輸入類型。 相反,註釋器像往常一樣繼續運行/處理。

有沒有辦法實現我想要的,或者這只是不必要的? 我目前正在使用SimplePipeline,如果重要的話。

TL; DR:我的目標是,註釋者拒絕運行,如果有某些其他註釋者缺少在管道/定這些註釋者

在此先感謝後。

回答

1

在UIMA中,確保您的註釋器需要註釋的主要方式是將註釋器聚合在一起。所以要回答你的問題,那就是你將如何實現你想要的,因爲你想做什麼(讓UIMA通過類型能力來定義你所有的依賴並提供警告)對於一組獨立的註釋器來說既不可能也不實際。

我的問題回到你身上,爲什麼很難通過創建聚合註釋器來確定我們的依賴關係?你知道你可以聚合管道嗎?如果它們運行正常並且提供了它們輸出的內容,那麼它們應該具有完整的所有註釋依賴項,以便您可以將它們用作構建自己的管道的輸入。

+0

謝謝您的回答。你在哪裏看到與術語混淆?我很清楚,單個註釋器不是流水線:-)另外,對我來說聚合註釋器並不困難,我只是想知道這是否是運行依賴註釋器的首選方式,因爲我將不得不聚集多個註釋器大多數註釋者對此沒有依賴性。例如:Annotator B需要在A之後運行; C需要在A之後運行,因此我將它聚合到A,B,C,儘管B和C沒有依賴關係。我寧願聚合到A,B和A; C,但A會運行兩次。 – schlimpf

+0

一個管道指的是一個CollectionReader +一些註釋器(將消費者視爲註釋器,他們基本上處於隱藏狀態)。所以當你寫道:**我希望UIMA在運行沒有Annotators的管道時會給我一些警告**我只是想檢查一下,以確定我們有相同的定義,因爲你在討論沒有註釋器的管道。爲了更好地回答關於依賴關係的問題,即使B和C沒有依賴關係,我也會將A,B,C作爲一個管道進行操作 - 只使用CAS中可用註釋的子集是正常的。 – ozborn

+0

但是句子並沒有在那裏結束:「..沒有Annotators有一些輸出類型被聲明爲使用Annotator的輸入類型。」我問這個問題的原因是因爲我發現聚集Annotator除了依賴關係之外沒什麼共同之處,這有點奇怪。作爲一名程序員,這反對我將「包裝」在一起的說辭:-) – schlimpf

0

UIMA不強制執行某些類型(註釋)必須存在。這是一個允許靈活性的功能。

然而,您可以用@TypeCapability註釋來記錄您的UIMAfit註釋器。此註釋的典型用法可能如下所示:

@TypeCapability(
    inputs="org.apache.uima.fit.type.Token", 
    outputs="org.apache.uima.fit.type.Token:pos") 

不過,這並不強制執行類型依賴關係。我在one project上做的是在UIMA之上實施my own checking system

+1

我也使用uimaFit,但作爲我測試的戰爭,這並不強制在場,我錯了嗎? – schlimpf

2

UIMA是一個非常靈活的框架。默認情況下,功能不被使用,並且如果存在的話純粹是信息性的。但是,請檢查例如在CapabilityLanguageFlowController

FlowController for the CapabilityLanguageFlow, which uses a linear flow 
but may skip some of the AEs in the flow if they do not handle the language 
of the current document or if their outputs have already been produced by 
a previous AE in the flow. 

你可以配置你的總用這樣的流量控制器,然後你可以從功能中受益。

披露:我工作的Apache UIMA項目(但我沒有使用CapabilityLanguageFlowController到目前爲止)

+0

謝謝你的回答。我已經看過流量控制器了。我可能可以使用它們來強制執行我的註釋器,但到目前爲止,這似乎對我的應用程序有點矯枉過正:-) – schlimpf