2012-01-12 24 views
3

我有一個產品列表,我嘗試按類別進行分類。用NLTK查找不完整句子的主題

「固態硬盤房屋」

「硬盤驅動器電纜」

「1TB移動硬盤」

「500GB硬盤,從生產廠家翻新」:他們將不完整的句子等描述

我該如何使用python和NLP來獲得像「Housing,Cable,Drive,Drive」這樣的輸出,或者描述哪一個詞正在修改哪一個? 預先感謝您

回答

2

NLP技術相對不適合處理這種文本。

表達方式不同:構建一個包含NLP過程以實現所需分類器的解決方案是非常有可能的,但增加的複雜性不一定能在開發速度或分類器精度改進方面帶來回報。
如果真的堅持使用NLP技術,POS標籤及其識別名詞的能力是最明顯的想法,但分塊和訪問WordNet或其他詞彙來源是NLTK的其他似是而非的用法。

而是基於簡單的正則表達式和一些啓發式如這些由NoBugs提出一個特設的解決方案可能是一個合適的解決問題的方法。當然,這樣的解決方案承擔兩個主要風險:

  • 過度擬合回顧了文本的部分/在建立規則的解決方案的
  • 可能雜亂/複雜性考慮,如果太多的規則和子規則介紹。

對完整(或非常大的樣本)的文本進行一些簡單的靜態分析應該有助於指導選擇幾種啓發式方法,並避免過度擬合的擔憂。我相當確信,與自定義詞典相關的相對較少的規則應該足以生成具有適當精度以及速度/資源性能的分類器。

甲一些想法:

  • 計數所有的語料庫中的手的相當大的一部分字(且可能所有雙克和三克)。該信息可以通過允許將最多的努力和最嚴格的規則分配給最常見的模式來推動分類器的設計。
  • 手動引入短字典其中最熱門的詞彙與聯營:
    • 他們的POS功能(主要是二進制事在這裏:即名詞與改性劑和其他非名詞。
    • 他們的代名詞根[如果適用]
    • 他們的階級[如果適用]
  • 如果該模式適用於大部分輸入文本,考慮文本年底前或前首先使用硬道理逗號作爲課堂選擇的主要關鍵。 如果模式不成立,只是給予第一個和最後一個詞更多的權重。
  • 考慮第一遍,其中文本被重寫,其中最常見的二元組被替換爲將會在詞典中的單個詞(甚至是人造碼字)
  • 考慮也取代最常見的拼寫錯誤或同義詞及其相應的同義詞根。在輸入中添加規則有助於提高精度,並且還有助於使字典中的一些規則/條目在精度上有很大的回報。
  • 對於字典中未找到的單詞,假定與數字混合在一起和/或在數字前加上的單詞是修飾詞,而不是名詞。假定
  • 考慮兩層分類,其中將不能合理分配類的輸入放入「手動堆」中以提示額外的檢查,這導致附加的規則和/或字典條目。經過幾次迭代後,分類器應該需要越來越少的改進和調整。
  • 尋找非顯而易見的功能。例如,某些語料庫是由多種來源混合而成,但其中一些來源可能包含特定規則,這些規則可幫助識別來源和/或適用於分類提示。例如,一些來源可能只包含大寫的文本(或文本通常超過50個字符,或末尾的截詞等)。

恐怕這個答案不能提供Python/NLTK片段作爲引入一個解決方案,但坦率地說,這種簡單的基於NLTK的方法最多可能令人失望。此外,我們應該有一個更大的輸入文本樣本集來指導合理方法的選擇,包括基於NLTK或NLP技術的方法。

1

我會創建一個名詞列表,手動,您正在尋找的所有名詞,或解析字典,如this one。過濾除了名詞以外的所有名詞,至少可以讓你「State Drive」,「Drive Cable」或「Drive」,忽略第一個標點符號後面的所有內容。