Python CountVectorizer:文档中存在术语
Python CountVectorizer: presence of term in documents
我正在使用 Python 进行 LDA 分析。
是否有开箱即用的方法来获取我的语料库中有多少文本(这是一个文本字符串列表)一个单词(编辑:n 个单词的术语)存在?
@titipata 的回答给出了词频:
import numpy as np
from sklearn.feature_extraction.text import CountVectorizer
texts = ['hey you', 'you ah ah ah']
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(texts)
freq = np.ravel(X.sum(axis=0))
import operator
# get vocabulary keys, sorted by value
vocab = [v[0] for v in sorted(vectorizer.vocabulary_.items(), key=operator.itemgetter(1))]
fdist = dict(zip(vocab, freq)) # return same format as nltk
词频在这里:
fdist
{u'ah': 3, u'you': 2, u'hey': 1}
但我想要
presence
{u'ah': 1, u'you': 2, u'hey': 1}
编辑:这也适用于 N 词的术语,您可以定义
我可以按如下方式计算我想要的内容,但是 CountVectorizer 有没有更快的方法?
presence={}
for w in vocab:
pres=0
for t in texts:
pres+=w in set(t.split())
presence[w]=pres
编辑:我刚刚为存在而写的内容不适用于 N 个词的术语。这有效但很慢:
counter = Counter()
for t in texts:
for term in vectorizer.get_feature_names():
counter.update({term: term in t})
如果您的语料库不是太大,这应该可以很好地工作并且速度很快。此外,它依赖于 python 内置。请参阅 Counter.
的文档
from collections import Counter
corpus = ['hey you', 'you ah ah ah']
sents = []
for sent in corpus:
sents.extend(list(set(sent.split()))) # Use set et to ensure single count
Counter(sents)
Returns:
Counter({'ah': 1, 'hey': 1, 'you': 2})
我正在使用 Python 进行 LDA 分析。 是否有开箱即用的方法来获取我的语料库中有多少文本(这是一个文本字符串列表)一个单词(编辑:n 个单词的术语)存在?
@titipata 的回答给出了词频:
import numpy as np
from sklearn.feature_extraction.text import CountVectorizer
texts = ['hey you', 'you ah ah ah']
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(texts)
freq = np.ravel(X.sum(axis=0))
import operator
# get vocabulary keys, sorted by value
vocab = [v[0] for v in sorted(vectorizer.vocabulary_.items(), key=operator.itemgetter(1))]
fdist = dict(zip(vocab, freq)) # return same format as nltk
词频在这里:
fdist
{u'ah': 3, u'you': 2, u'hey': 1}
但我想要
presence
{u'ah': 1, u'you': 2, u'hey': 1}
编辑:这也适用于 N 词的术语,您可以定义
我可以按如下方式计算我想要的内容,但是 CountVectorizer 有没有更快的方法?
presence={}
for w in vocab:
pres=0
for t in texts:
pres+=w in set(t.split())
presence[w]=pres
编辑:我刚刚为存在而写的内容不适用于 N 个词的术语。这有效但很慢:
counter = Counter()
for t in texts:
for term in vectorizer.get_feature_names():
counter.update({term: term in t})
如果您的语料库不是太大,这应该可以很好地工作并且速度很快。此外,它依赖于 python 内置。请参阅 Counter.
的文档from collections import Counter
corpus = ['hey you', 'you ah ah ah']
sents = []
for sent in corpus:
sents.extend(list(set(sent.split()))) # Use set et to ensure single count
Counter(sents)
Returns:
Counter({'ah': 1, 'hey': 1, 'you': 2})