如何使 sklearn.TfidfVectorizer 标记化特殊短语?

How to make sklearn.TfidfVectorizer tokenize special phrases?

我正在尝试使用 python 中 sklearn 包中的 TfidfVectorizer 创建一个 tf-idf table。例如我有一个字符串的语料库 "PD-L1 expression positive (≥1%–49%) and negative for actionable molecular markers"

TfidfVectorizer 有一个 token_pattern 参数,指示令牌应该是什么样子。 默认是token_pattern = token_pattern='(?u)\b\w\w+\b',它会把所有的单词按space拆分,去掉数字和特殊字符来创建token,生成如下的一些token

["pd", "expression", "positive","and" ,"negative" ,"for" ,"actionable" ,"molecular" ",markers"]

但我想要的是:

["pd-l1", "expression", "positive", "≥1%–49%","and" ,"negative" ,"for" ,"actionable" "molecular" ,"markers"]

我花了好几个小时来调整 token_pattern 参数,但无法正确处理。或者,这里有没有一种方法可以明确地告诉向量化器我想要 pd-l1>1%-49% 作为标记,而不会在 regrex 上过于疯狂?任何帮助是 非常感谢!

我使用模式 '[^ ()]+' 获取它 - 除了 space()

之外的所有字符

可能需要将 punctuations 添加到此列表。

from sklearn.feature_extraction.text import TfidfVectorizer

corpus = [
 "PD-L1 expression positive (≥1%–49%) and negative for actionable molecular markers"
]

vectorizer = TfidfVectorizer()
print('token_pattern:', vectorizer.token_pattern)

vectorizer.token_pattern = '[^ ()]+'
print('token_pattern:', vectorizer.token_pattern)

X = vectorizer.fit_transform(corpus)

print(vectorizer.get_feature_names())

结果

['actionable', 'and', 'expression', 'for', 'markers', 'molecular', 'negative', 'pd-l1', 'positive', '≥1%–49%']

我使用了文档中的示例代码 TfidfVectorizer


编辑:

查了文档,可以直接设置

vectorizer = TfidfVectorizer(token_pattern='[^ ()]+')