1

我需要为几个句子计算 tfidf 矩阵。句子包括数字和单词。我正在使用下面的代码这样做

import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer

data1=['1/8 wire','4 tube','1-1/4 brush']
dataset=pd.DataFrame(data1, columns=['des'])
vectorizer1 = TfidfVectorizer(lowercase=False)
tf_idf_matrix = pd.DataFrame(vectorizer1.fit_transform(dataset['des']).toarray(),columns=vectorizer1.get_feature_names())

Tfidf 函数只考虑单词作为它的词汇,即

Out[3]: ['brush', 'tube', 'wire']

但我需要数字成为令牌的一部分

预期的

Out[3]: ['brush', 'tube', 'wire','1/8','4','1-1/4']

阅读TfidfVectorizer文档后,我知道必须更改token_patterntokenizer参数。但我不知道如何改变它来考虑数字和标点符号。

谁能告诉我如何更改参数。

4

2 回答 2

1

你是对的,token_pattern需要一个自定义正则表达式模式,传递一个正则表达式,它将任何一个或多个不包含空白字符的字符视为单个标记。

tfidf = TfidfVectorizer(lowercase=False, token_pattern=r'\S+') 
tf_idf_matrix = pd.DataFrame(
    tfidf.fit_transform(dataset['des']).toarray(), 
    columns=tfidf.get_feature_names()
)

print(tf_idf_matrix)

      1-1/4       1/8         4     brush      tube      wire
0  0.000000  0.707107  0.000000  0.000000  0.000000  0.707107
1  0.000000  0.000000  0.707107  0.000000  0.707107  0.000000
2  0.707107  0.000000  0.000000  0.707107  0.000000  0.000000
于 2018-05-24T07:08:10.407 回答
1

您可以在 token_pattern 参数中明确指出您要解析的符号:

    token_pattern_ = r'([a-zA-Z0-9-/]{1,})'

其中 {1,} 表示单词应包含的最小符号数。End 然后将其作为参数传递给 token_pattern:


    tfidf = TfidfVectorizer(token_pattern = token_pattern_)
于 2020-11-08T12:04:00.367 回答