sklearn 中字母的 N-gram

Avi*_*vic 1 python nlp scikit-learn

我想做 n-grams 方法但是一个字母一个字母

正常的 N-gram:

sentence : He want to watch football match

result:
he, he want, want, want to , to , to watch , watch , watch football , football, football match, match
Run Code Online (Sandbox Code Playgroud)

我想这样做,但要逐字逐句:

word : Angela 

result:
a, an, n , ng , g , ge, e ,el, l , la ,a
Run Code Online (Sandbox Code Playgroud)

这是我使用 的代码Sklearn,但它仍然是逐字而不是逐字:

from sklearn.feature_extraction.text import CountVectorizer

vectorizer = CountVectorizer(ngram_range=(1, 100),token_pattern = r"(?u)\b\w+\b")

corpus = ['Angel','Angelica','John','Johnson']

X = vectorizer.fit_transform(corpus)
analyze = vectorizer.build_analyzer()
print(vectorizer.get_feature_names())
print(vectorizer.transform(['Angela']).toarray())
Run Code Online (Sandbox Code Playgroud)

Viv*_*mar 5

有一个'analyzer'参数可以做你想要的。

根据文档:-

分析器:字符串、{'word'、'char'、'char_wb'} 或可调用

特征应该由单词还是字符 n-gram 组成。选项 'char_wb' 仅从单词边界内的文本创建字符 n-gram;单词边缘的 n-gram 用空格填充。

如果传递了一个可调用对象,它将用于从未处理的原始输入中提取特征序列。

默认情况下,它设置为 word,您可以更改它。

做就是了:

vectorizer = CountVectorizer(ngram_range=(1, 100),
                             token_pattern = r"(?u)\b\w+\b", 
                             analyzer='char')
Run Code Online (Sandbox Code Playgroud)