【问题标题】:How to make sklearn.TfidfVectorizer tokenize special phrases?如何使 sklearn.TfidfVectorizer 标记特殊短语?
【发布时间】:2021-08-10 03:30:18
【问题描述】:

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

TfidfVectorizer 有一个 token_pattern 参数,指示令牌应该是什么样子。 默认是token_pattern = token_pattern='(?u)\b\w\w+\b',它会用空格分割所有单词并删除数字和特殊字符来创建标记,并生成一些如下所示的标记

["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% 作为令牌而不会对正则表达式过于疯狂?任何帮助都是 非常感谢!

【问题讨论】:

  • 您应该显示您尝试使用的token_pattern
  • 使用普通模块re 我可以在re.findall(token_pattern, text) 中使用token_pattern='[^ ()]+'(除space() 之外的所有字符)来拆分它,但TfidfVectorizer 可以在不同的方式。
  • 谢谢!如本文所述,我使用默认设置,尝试对其进行调整,但失败了。我需要把所有失败的试验都放在这里吗?
  • 如果你能创建最少的工作代码,我们可以复制和测试想法会更简单。您可以添加试验以查看您已经测试过的内容。

标签: python regex scikit-learn tokenize tfidfvectorizer


【解决方案1】:

我使用模式 '[^ ()]+' 得到它 - 除了 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='[^ ()]+')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 2018-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多