簡體   English   中英

使用 scikit-learn 的術語文檔矩陣時,如何防止帶連字符的單詞被標記化?

[英]How can I prevent words with hyphens from being tokenized when using scikit-learn`s term document matrix?

我目前正在處理大量文章(大約 20.5 萬篇),這需要構建術語文檔矩陣。

我環顧四周,似乎 sklearn 提供了一種構建它的有效方法。 但是,當將建議的代碼應用於一小部分文檔(作為測試)時,我發現包含連字符的單詞被分開,連字符作為分隔符。 這是不可取的,因為我正在處理葡萄牙語的文檔,由於大量的復合名詞,連字符非常常見。 我想知道如何生成一個術語文檔矩陣,該矩陣僅包含我的語料庫的所有標記作為coluns,其中僅使用空格作為標記之間的分隔符(如果一個單詞包含連字符,則應考慮作為單個令牌)。

這是代碼:

index=['doc 1','doc 2','doc 3','doc 4']
docs=['como você está', 'guarda-chuva!','covid-19 piorou','teto-de-gastos do tesouro']

df = pd.DataFrame(list(zip(index, docs)))
df.columns = ['index', 'docs']

from sklearn.feature_extraction.text import CountVectorizer
vect = CountVectorizer()  
vects = vect.fit_transform(df.docs)
td = pd.DataFrame(vects.todense()).iloc[:len(df)]  
td.columns = vect.get_feature_names()
term_document_matrix = td.T
term_document_matrix.columns = ['Doc '+str(i) for i in range(1, len(df)+1)]
term_document_matrix['total_count'] = term_document_matrix.sum(axis=1)

打印矩陣時,我發現“teto-de-gastos”變成了“teto”、“de”、“gastos”,這是我不想要的。 有關如何解決此連字符問題的任何建議?

有一個參數可以讓您在創建CountVectorizer實例時覆蓋標記器函數。 您唯一應該考慮的是實現您想要的標記器。

vect = CountVectorizer(tokenizer=lambda document:document.strip().split()) 

輸出:

   como  covid-19  do  está  guarda-chuva!  piorou  tesouro  teto-de-gastos  \
0     1         0   0     1              0       0        0               0   
1     0         0   0     0              1       0        0               0   
2     0         1   0     0              0       1        0               0   
3     0         0   1     0              0       0        1               1   

   você  
0     1  
1     0  
2     0  
3     0  

作為旁注,您應該非常小心地執行此操作並使用大量測試場景,以防止您尚未考慮的潛在主要部分出現意外行為:)

暫無
暫無

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

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