【问题标题】:Custom tokenizer for scikit-learn vectorizersscikit-learn 向量化器的自定义标记器
【发布时间】:2018-02-23 12:49:40
【问题描述】:

鉴于以下文件列表:

docs = [
'feature one`feature two`feature three',
'feature one`feature two`feature four',
'feature one'
]

我想使用 scikit 中的任何一个矢量化器类(CountVectorizerTfidfVectorizer),'feature one''feature two''feature three''feature four' 应该是矩阵中表示的四个特征.

我试过了:

vec = CountVectorizer(token_pattern='(?u)\w+\s.\w.`')

但这只会返回这个:

['feature one`', 'feature two`']

【问题讨论】:

  • 您能详细说明一下吗?目前还不清楚。反引号字符对您有特殊含义吗?
  • 我使用反引号字符作为自定义分隔符。我猜这与使用逗号分隔 CSV 中的字段没有什么不同。

标签: python scikit-learn


【解决方案1】:

如果您已将功能固定为

'feature one', 'feature two', 'feature three', and 'feature four'

那么你也可以使用vocabulary参数。

vocab = ['feature one', 'feature two', 'feature three', 'feature four']
vec = CountVectorizer(vocabulary=vocab)

X = vec.fit_transform(docs)
vec.get_feature_names()
Out[310]:
['feature one',
 'feature two',
 'feature three',
 'feature four']

【讨论】:

    【解决方案2】:
    In [295]: vec = CountVectorizer(token_pattern='(?u)\w+[\s\`]\w+')
    
    In [296]: X = vec.fit_transform(docs)
    
    In [297]: vec.get_feature_names()
    Out[297]: ['feature four', 'feature one', 'feature three', 'feature two']
    

    您可能还想考虑使用ngram_range=(2,2),它会产生以下结果:

    In [308]: vec = CountVectorizer(ngram_range=(2,2))
    
    In [309]: X = vec.fit_transform(docs)
    
    In [310]: vec.get_feature_names()
    Out[310]:
    ['feature four',
     'feature one',
     'feature three',
     'feature two',
     'one feature',
     'two feature']
    

    【讨论】:

    • 你能详细说明一下中间的[\s`]吗?这是否匹配空白字符或 ``` 字符?
    • @blacksite,是的,如果还需要接受其他字符,则需要对其进行扩展...
    猜你喜欢
    • 2017-12-25
    • 1970-01-01
    • 2022-06-11
    • 2020-02-04
    • 2015-02-11
    • 2019-01-14
    • 2015-12-17
    • 2021-10-25
    • 2019-06-09
    相关资源
    最近更新 更多