在上一篇文章《基於Gate的中文信息抽取API調用方式--未成功》中本來想採用Gate中的中文插件進行命名實體識別,但是沒有成功,最後只能通過擴展Gate中的ANNIE插件來實現了。
ANNIE是Gate中用於英文信息抽取的插件,可以實現英文中的諸如命名實體識別等任務。要想處理中文信息需要對ANNIE進行擴展,包括擴展詞表以及規則。ANNIE的主要詞表爲主目錄是ANNIE\resource\gazetteer,後綴名爲lst詞表文件中存放着詞語,詞表以UTF-8編碼,每個詞語獨立一行。Gate需要一個索引文件確定詞表文件以及類別之間的對應關係,一般爲lists.def,內容形如
airports.lst:location:airport
其中airports.lst爲詞表文件,location是爲詞表指定的主要類型,airport爲指定的次要類型。這些詞表會編譯成有限狀態機,用於後續過程調用。
語法規則指定需要識別的特定類型,以jape爲後綴的文件均是存放的語法規則,放置目錄爲ANNIE\resource\NE,可以根據自己的需要進行擴展。main.jape存放着所需要的所有規則文件名稱。
具體的代碼和執行過程與前一篇中的內容一致,主要區別在於加載ANNIE。
public void initAnnie(){
Out.prln("Initialising ANNIE...");
try {
annieController = (SerialAnalyserController) PersistenceManager.loadObjectFromFile(new File(new File(Gate.getPluginsHome(),ANNIEConstants.PLUGIN_DIR), ANNIEConstants.DEFAULT_FILE));
} catch (PersistenceException e) {
logger.error(e.getMessage());
e.printStackTrace();
} catch (ResourceInstantiationException e) {
logger.error(e.getMessage());
e.printStackTrace();
} catch (IOException e) {
logger.error(e.getMessage());
e.printStackTrace();
}
Out.prln("...ANNIE loaded");
}
執行結果良好,能夠達到我的需要。