2015-08-08 39 views
1

我有特殊的詞和複合名詞 ,應該在我的系統中被識別爲名詞。如何在斯坦福NLP中擴展/修改字典?

例如:

我。)「XYZBrand」創名牌,這不是在標準字典

II)「銅線」應該被視爲1個令牌所有整個系統。

都「」 XYZBrand」和‘銅線’上面應該被視爲每個。 或者說, 這一切都很好,如果他們被對待的方式任何其他名詞名詞,說 ‘外套’是。

據我所見,StanfordNLP做只是所以對於第一種情況之上。 時,看到一個令牌,這不是在字典中,它的 把它作爲一個名詞(?)。 所以,這是所有關於複合名詞 - 比如上面的「銅線」

從我看到的,有以下幾種做法它:

1)將複合詞從開始: 添加到字典中,以便StanfordNLP將它們標記化並從頭開始處理。 如何做到這一點?這是我期待的方式。

2.)定義GrammaticalRelationUniversalEnglishGrammaticalRelations到 看到這些複合詞。這將工作。然而我不會總是需要parser在管道中,這並不「感覺」像一個適當的轉折。

3.)將它們標記爲 - 每當有「銅」和「線」並排時,將這兩個作爲一個標記。然而,這需要鍛鍊與edu.stanford.nlp.process.PTBLexer ,我並不太願意這樣做。

4.)寫一個註釋器在TokenizerAnnotator之後進入。

5.)在饋入斯坦福大學NLP之前預處理文本:例如,將「銅線」 變成「銅線」。這是我最不喜歡的解決方案。

如何在系統中的字典中添加新術語?

TIA。

// ===========================

編輯:

「銅」 和 「線」當以空格分開並排出現時 是總是作爲一個標記 - 我們的上下文中的「銅線」是有意義的。

仰視的類型依賴,看看它是否是一個 複合名詞與「右」 其他實物令牌(S)是不是一個有利的選擇:

  • 我們的「複合名詞」 AREN永遠不會有名詞的組合。「小contanier」 也應該是我們系統中的一個令牌。

  • 將查找令牌,例如說「銅」,並檢查其與其他令牌的依賴關係 並減慢速度。 這是查找我們的詞集和 追蹤的依賴關係 - 「amod」的「容器」和「化合物」的「線」 幾乎在每一步。

  • 我會尋找扭轉其他事情。例如:在

    "some sugar and a bit of salt" 
    

「糖」和「位」是「連接詞:和」 -ed準確地將語法。然而,在我們的情況下,「conj:and」 - 「糖」和「鹽」更準確。

一旦我找到一個好方法,我自己的字典注入覆蓋 字典tokenizer和惡搞使用,或者更確切地說,覆蓋 tokenizer和惡搞的訓練有素的行爲,我可以彎曲系統 到按照我們自己的一套條款處理。這個Q就是尋找這種方式來做這個彎曲。

回答

3

我認爲斯坦福CoreNLP中運行的底層技術存在一些混淆。我會盡力澄清一些困惑,然後在帖子底部提出一種方法。

  • 我們的標記器確實是一個確定性的詞法分析器。將它改爲將「銅線」視爲單個標記是可能的,但實際上我相信這不是預期的行爲:「銅」和「線」都是不同的標記,它們形成複合名詞。

  • 我們的詞性標註系統根本不基於字典。相反,它是一個概率序列模型,通過一系列訓練實例進行訓練。我們可以添加額外的訓練數據,但不會增加額外的字典項目此外,標記器確實正確地同時獲得「銅」和「電線」作爲名詞。

  • A GrammaticalRelation定義了一種依賴邊緣 - 例如,compound。我相信,這已經是你想要的優勢,並且不應該有必要定義其他關係。

在解決方案方面,你可以很容易地通過運行依賴解析器發現複合名詞(該depparse是非常快的),然後尋找與compound圓弧連接名詞組。一旦你找到了這些複合名詞,你可以做兩件事之一。

  1. 減建議:重新標記化的句子,使得這些名詞作爲單個令牌處理;或

  2. 建議:將複合名詞跨度(即邊界即將出現的字)作爲標記處理,然後當您必須恢復完整名詞時,只需添加全部compound邊緣。因此,就您的情況而言,請將「wire」視爲「銅線」的佔位符,並根據需要從依賴關係樹中簡單地按需恢復「銅」部分。

+0

你似乎已經走在我們前面瞭解我們想要的東西。我會嘗試在編輯中清除它們。 – Roam