私は、データフレーム文字列に適合しようとしているデータフレームとボキャブラリファイルがあるシナリオを持っています。私はscikitを使用している疎な行列を生成するcountVectorizerを学ぶ。私は、疎な行列の出力を取得し、それをデータフレームの対応する行のデータフレームとマージする必要があります。スパース行列全体を繰り返し、各行のデータとインデックスを連結します。
コードは: -
from sklearn.feature_extraction.text import CountVectorizer
docs = ["You can catch more flies with honey than you can with vinegar.",
"You can lead a horse to water, but you can't make him drink.",
"search not cleaning up on hard delete",
"updating firmware version failed",
"increase not service topology s memory",
"Nothing Matching Here"
]
vocabulary = ["catch more","lead a horse", "increase service", "updating" , "search", "vinegar", "drink", "failed", "not"]
vectorizer = CountVectorizer(analyzer=u'word', vocabulary=vocabulary,lowercase=True,ngram_range=(0,19))
SpraseMatrix = vectorizer.fit_transform(docs)
Below is sparse matrix output -
(0, 0) 1
(0, 5) 1
(1, 6) 1
(2, 4) 1
(2, 8) 1
(3, 3) 1
(3, 7) 1
(4, 8) 1
は今、私は何を探していますと、スパース行列から行ごとに文字列を作成し、それに対応する文書に追加しています。
例:doc3(「ファームウェアの更新に失敗しました」)の場合、スパース行列から「3:1 7:1」を取得します(つまり、&の列インデックスとその頻度が更新されません) docのデータフレームの行3.
私は以下のようにして、行インデックスに基づいてサブマトリックスを取得し、それをループし、各行の連結文字列を "3: 1 7:1 "に変換し、最後にこの文字列を新しい列としてデータフレームに追加します。
cx = SpraseMatrix .tocoo()
for i,j,v in zip(cx.row, cx.col, cx.data):
print((i,j,v))
(0, 0, 1)
(0, 5, 1)
(1, 6, 1)
(2, 4, 1)
(2, 8, 1)
(3, 3, 1)
(3, 7, 1)
(4, 8, 1)
これはまさに私が探していたものです。可能であれば、.indptrアプローチもチェックアウトしたいと考えています。どうもありがとう ! –