在scikit learn或nltk分类器中,通常会考虑术语频率或TF-IDF。
我想考虑术语频率,分类的句子结构。我有15类问题。每个文本文件都包含带有新行的句子。
类别城市包含这句话:
In which city Obama was born?
如果我考虑学期频率,则可能不会考虑以下情况。因为数据集中的奥巴马或城市与查询句子不匹配
1. In which place Hally was born 2. In which city Hally was born?
是否有任何分类器同时考虑术语频率和句子结构。因此,在训练时,它也会对具有相似句子结构的输入查询进行分类
答案 0 :(得分:2)
除了unigrams之外,您还可以在ngrams上训练tf-idf。
在Scikit中,您可以指定将被考虑的ngram_range
:如果您将其设置为最多3克训练,则最终会存储单词组合的频率,例如“在哪个地方” ,这很好地表明了问题的类型。
答案 1 :(得分:1)
正如drekyn
所说,你可以使用Scikit学习特征提取这里有一些例子:
>>> bigram_vectorizer = CountVectorizer(ngram_range=(1, 2),
... token_pattern=r'\b\w+\b', min_df=1)
>>> analyze = bigram_vectorizer.build_analyzer()
>>> analyze('Bi-grams are cool!') == (
... ['bi', 'grams', 'are', 'cool', 'bi grams', 'grams are', 'are cool'])
True