簡體   English   中英

sklearn - 如何使用TfidfVectorizer來使用整個字符串?

[英]sklearn - how to use TfidfVectorizer to use entire strings?

我有這個問題,我使用我的數據集中的所有URL的主機名作為功能。 我無法弄清楚如何使用TfidfVectorizer僅從URL中提取主機名並計算其權重。 例如,我有一個數據幀df,其中'url'列包含我需要的所有URL。 我以為我必須這樣做:

def preprocess(t):
    return urlparse(t).hostname

tfv = TfidfVectorizer(preprocessor=preprocess)

tfv.fit_transform([t for t in df['url']])

它似乎沒有這種方式工作,因為它拆分主機名而不是將它們視為整個字符串。 我認為這與analyzer ='word'(默認情況下)有關,它將字符串拆分為單詞。

任何幫助將不勝感激,謝謝!

你是對的。 analyzer=word創建一個使用默認令牌模式'(?u)\\b\\w\\w+\\b'的tokeniser。 如果您想將整個URL標記為單個標記,則可以更改標記模式:

vect = CountVectorizer(token_pattern='\S+')

這標記為https://www.pythex.org hello hello.there['https://www.pythex.org', 'hello', 'hello.there'] 然后,您可以創建分析器以從URL中提取主機名, 如此問題中所示。 你可以擴展CountVectorizer來改變它的build_analyzer方法,或者只是修補它:

def my_analyser():
    # magic is a function that extracts hostname from URL, among other things
    return lambda doc: magic(preprocess(self.decode(doc)))

vect = CountVectorizer(token_pattern='\S+')
vect. build_analyzer = my_analyser
vect.fit_transform(...)

注意:標記化並不像看起來那么簡單。 我使用的正則表達式有許多限制,例如,如果在完全停止后沒有空格,它不會拆分句子的最后一個標記和下一個句子的第一個標記。 一般來說,正則表達式令牌器很快變得非常笨拙。 我建議查看nltk ,它提供了幾種不同的非正則表達標記器。

暫無
暫無

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

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