LoginSignup
1
2

More than 5 years have passed since last update.

numpy.vectorizeで文字列同士の計算をしたベクトルを得る

Posted at

自然言語処理をやっていると類似度などの文字列同士の計算をしたベクトルを得たいときがあります。例えば文字列のリスト['aiueo', 'aaa', 'iii']から'aiueo'に似ているものを選びたいとき。
そんなときは、類似度計算関数をnumpy.vectorizeすると以下のように類似度のベクトルを得られます (ここでは類似度関数としてpython-levenshteinパッケージのjaro_winkler関数を使っています)


>>> import numpy
>>> from Levenshtein import jaro_winkler
>>> vectorized_jaro_winkler = numpy.vectorize(jaro_winkler)
>>> print(vectorized_jaro_winkler('aiueo', ['aiueo', 'aaa', 'iii']))
[1.         0.56       0.51111111]

そして最もスコアが高いものを選ぶときはnumpy.argmaxを使います。


>>> result = vectorized_jaro_winkler('aiueo', ['aiueo', 'aaa', 'iii'])
>>> print(numpy.argmax(result))
0

スコアが高い順にソートするときはnumpy.argsortにマイナスをかけたパラメータを与えます。


>>> print(numpy.argsort(-result))
[0 1 2]

ちなみにPythonのstr型にあるような関数で一括で処理するときはnumpy.chararrayを使うと便利です。


>>> a = numpy.array(['aiueo', 'aaa', 'iii'])
>>> print(numpy.chararray.startswith(a, 'a'))
[ True  True False]
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2