python 中 tfidfvectorizer sklearn 中数字的标记模式

token-pattern for numbers in tfidfvectorizer sklearn in python

我需要计算几个句子的 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 参数。但我不知道如何更改它以考虑数字和标点符号。

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

你说得对,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

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

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

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


    tfidf = TfidfVectorizer(token_pattern = token_pattern_)