2010-06-24 158 views
5

我想知道哪些可以幫助我從文本中提取語義特徵的開放源代碼工具(用於java/python)&。語義特徵的例子是形容詞 - 名詞比率,特定的詞性標籤序列(形容詞後面跟着名詞:adj | nn)等等。文體特徵的例子是獨特詞語的數量,代詞數量等。目前,我只知道Word to Web Tools,它將文本塊轉換爲基本向量空間模型。從文本中提取語義/文體特徵

我知道一些文本挖掘包,比如GATENLTKRapid Miner Mallet MinorThird的。但是,我找不到適合我的任務的機制。

問候,
--Denzil

回答

1

我用Lucene的分析和索引機制,建立文檔向量空間,然後在這個空間導航。您可以爲文檔構建詞頻矢量,使用現有文檔在向量空間中搜索其他similar文檔。如果你的數據很大(數百萬個文檔,數以萬計的功能),那麼你可能會喜歡Lucene。你也可以做詞幹,標記和其他東西。這個blog post可能是POS標籤的一個很好的起點。簡而言之,Lucene爲您提供了實現所提及的任務的所有必要機制。

我經常聽到的一個庫是Semantic Vectors。它再次建立在Lucene之上,但我沒有直接體驗那個。除此之外,我建議看看維基百科的矢量空間模型article

+0

機Amac,感謝您的答覆! 「向量空間模型」雖然是一個非常健壯的模型,但它是一個原始模型,更多依賴於統計數據。我想使用語義知識從概念等文本中實現更復雜的模型。博客文章可以幫助我使用Lucene提取一系列POS模式,但是像NLTK這樣的更輕量級的包(當然使用正則表達式)可以幫助我執行相同的任務。感謝您將我指向Semantic Vectors軟件包。雖然它不直接幫助我完成任務,但我會考慮將它用於其他任務。 – Dexter 2010-06-29 11:22:54

1

我對一些NLP(自然語言處理)任務使用了NLTK,它的工作非常好(雖然有點慢)。爲什麼你要這樣一個結構化的文字表示? (真正的問題,因爲取決於應用程序有時候更簡單的表示可能會更好)

+0

Gabe,感謝您的迴應!我有一個.txt文件中的句子列表(2900萬句子是準確的)。每個句子都注有一些主題。每個句子可以有多個註釋。我有一個來自文本文件的獨特單詞列表和唯一註釋列表。我需要創建一個單詞(獨特的術語) - 註釋矩陣(類似於術語文檔矩陣)。然而,考慮到獨特詞彙的數量約爲1500萬,註釋數量爲318k,我在海上處境如何。數據結構的大小讓我失望。 – Dexter 2010-07-09 05:15:37

+0

那麼*是*很大:-D對於初學者來說,你可能不想一次讀完整個文件,幾秒鐘:你確定你需要一次完成內存中的整個數據結構你在做什麼?根據你想要做什麼,查看將數據存儲在數據庫中(鍵值類型的數據庫(couchdb et。al。)或RDB中的簡單表格可能不會出現問題mysql)。 – Gabe 2010-07-13 09:14:58

+0

Gabe,我沒關係在RDBMS中保留這些功能等等。主要的一點是提取它們! – Dexter 2010-07-16 10:29:31

2

如果您的文本主要是自然語言(英語),您嘗試使用詞性(POS)標記提取短語。 Monty tagger是一款純粹的python POS tagger。 我從C++ POS tagger中獲得了非常滿意的性能,例如CRFTagger http://sourceforge.net/projects/crftagger/。我使用subprocess.Popen將它綁定到Python。 POS標籤允許您僅保留一個句子的重要部分:例如名詞和動詞,然後可以使用任何索引工具(如Lucene或Xapian(我的最愛))對其進行索引。

+0

Ken,謝謝!問題在於文本分類任務我沒有找到一種可以提取的編程語言多年來我們已經看到很多標準功能被用作上面提到的標準功能,但是我感到驚訝和失望,因爲研究人員沒有發出相同的代碼 – Dexter 2010-07-17 12:02:47

3

我認爲斯坦福解析器是免費提供的最好的和全面的NLP工具之一:它不僅將讓你解析結構依賴(數名詞/形容詞),但它也會給你的語法依賴關係在句子中(所以你可以提取主題,對象等)。後一個組件是Python庫根本無法實現的功能(請參閱Does NLTK have a tool for dependency parsing?),並且可能會成爲軟件使用語義的能力方面最重要的功能。

如果您對Java和Python工具感興趣,那麼Jython可能是您使用最有趣的工具。我是在完全一樣的船,所以我寫了這篇文章關於用Jython運行在斯坦福分析器提供的示例代碼 - 我想給它一眼,看看你的想法:http://blog.gnucom.cc/2010/using-the-stanford-parser-with-jython/

編輯:看完你的一條評論我知道你需要解析2900萬句子。我認爲,通過使用純Java來結合兩種非常強大的技術,可以大大受益:Stanford Parser + Hadoop。兩者都是純粹用Java編寫的,並且有一個非常豐富的API,您可以使用它來在一組機器上的一小部分時間內解析大量數據。如果你沒有機器,你可以使用亞馬遜的EC2集羣。如果您需要使用Stanford Parser + Hadoop的示例,請爲我留言,我將使用我的示例的URL更新該帖子。