簡體   English   中英

NLP:如何結合詞干提取和標記?

[英]NLP: How do I combine stemming and tagging?

我正在嘗試編寫代碼,該代碼傳入已標記化並過濾掉停用詞的文本,然后對其進行詞干和標記。 但是,我不確定應該按什么順序進行詞干和標記。 這就是我現在所擁有的:

#### Stemming
ps = PorterStemmer()    # PorterStemmer imported from nltk.stem

stemText = []

for word in swFiltText:    # Tagged text w/o stop words
    stemText.append(ps.stem(word))


#### POS Tagging
def tagging():
    tagTot = []
    try:
        for i in stemText:
            words = nltk.word_tokenize(i)    # I need to tokenize again (idk why?)
            tagged = nltk.pos_tag(words)
            tagTot = tagTot + tagged    # Combine tagged words into list

    except Exception as e:
        print(str(e))
    return tagTot

tagText = tagging()

乍一看,這很好用。 但是,因為我先提取詞干,所以pos_tag經常錯誤地標記單詞。 例如,它把“house”標記為形容詞,而原來的詞實際上是名詞“house”。 但是當我在標記后嘗試詞干時,它給我一個關於pos_tag如何無法處理“元組”的錯誤 - 我猜這與詞干分析器將單詞列表格式化為[('come', 'VB'), ('hous', 'JJ')

我應該使用不同的詞干分析器/標記器嗎? 或者是我的代碼中的錯誤?

提前致謝!

在對其應用詞干提取或詞形還原之前,您應該標記文本。

刪除單詞的結尾會帶走關於單詞的詞性標記的重要線索。

你將hous作為形容詞的原因是任何標注器都需要未處理的標記,而英語中以-ous結尾的詞通常是形容詞( nefariousserious )。 如果您先標記它,它可以被識別(即使沒有上下文)為名詞或動詞。 然后標注器可以使用上下文(前面? -> 名詞)來消除最有可能的歧義。

一個好的詞形還原器可以考慮詞性,例如housing可以是名詞(詞條: housing )或動詞(詞條: house )。 有了 pos 信息,詞形還原器可以在那里做出正確的選擇。

您是使用詞干提取還是詞形還原取決於您的應用程序。 對於許多目的,它們將是等價的。 與我的經驗的主要區別在於:

  1. 詞干提取要快得多,因為詞干提取器有一些關於如何處理各種結尾的規則
  2. 詞形還原為您提供“正確”的單詞,您可以在詞典中查找這些單詞(如果您想獲得其他語言或定義的注釋)
  3. 有詞干的字符串有時看起來與原始單詞完全不同,如果您將它們呈現給人類用戶,他們可能會感到困惑
  4. Stemmers 將具有相似含義但不同詞條的詞合並,因此對於信息檢索它們可能更有用
  5. 詞干分析器不需要單詞列表,因此如果您想編寫自己的詞干分析器,它比編寫詞干分析器更快(如果您正在處理沒有現成工具的語言)

我建議使用詞形還原而不是詞干提取,詞干提取只是從末尾切掉字母,直到到達根/詞干詞。 詞形還原還會查看周圍的文本以確定給定單詞的詞性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM