Comparaison de vitesse de partage en Python / janome, sudachi, ginza, mecab, fugashi, tinysegmenter

Comparaison de vitesse d'analyse morphologique en Python

Comparaison

Préparation

Référence: pip freeze

reqirements.txt


blis==0.4.1
catalogue==1.0.0
certifi==2020.4.5.2
chardet==3.0.4
cymem==2.0.3
Cython==0.29.19
dartsclone==0.9.0
fugashi==0.2.3
ginza==3.1.2
idna==2.9
ja-ginza==3.1.0
ja-ginza-dict==3.1.0
Janome==0.3.10
mecab-python3==0.996.5
murmurhash==1.0.2
numpy==1.18.5
plac==1.1.3
preshed==3.0.2
requests==2.23.0
sortedcontainers==2.1.0
spacy==2.2.4
srsly==1.0.2
SudachiDict-core==20200330
SudachiPy==0.4.5
thinc==7.4.0
tinysegmenter==0.4
tqdm==4.46.1
unidic-lite==1.0.6
urllib3==1.25.9
wasabi==0.6.0

Code et résultats d'exécution

Afficher le code

ma.py


import time

from janome.tokenizer import Tokenizer
from sudachipy import dictionary
import spacy
from MeCab import Tagger as mecab
from fugashi import Tagger as fugashi
import tinysegmenter

def use_janome(s, cache=None):
  t = Tokenizer() if cache is None else cache
  [token.surface for token in t.tokenize(s)]
  return t


def use_sudachi(s, cache=None):
  t = dictionary.Dictionary().create() if cache is None else cache
  [token.surface() for token in t.tokenize(s)]
  return t


def use_ginza(s, cache=None):
  t = spacy.load('ja_ginza') if cache is None else cache
  [token for token in t(s)]
  return t


def use_mecab(s, cache=None):
  t = mecab('-Owakati')
  [token for token in t.parse(s).split(' ')]
  return t


def use_fugashi(s, cache=None):
  t = fugashi('-Owakati')
  t(s)
  return t


def use_tinysegmenter(s, cache=None):
  t = tinysegmenter.TinySegmenter()
  t.tokenize(s)
  return t


def stopwatch(func, times=100):
  #Momotaro Ryunosuke Akutagawa https://www.aozora.gr.jp/cards/000879/card100.html
  s = 'Il était une fois, il était une fois un grand pêcher au fond d'une montagne profonde. Ce n'est peut-être pas suffisant pour être gros. Les branches de cette pêche s'étalaient au-dessus des nuages, et les racines de cette pêche s'étendaient même jusqu'au pays de la source jaune au fond de la terre. Tout est ciel et terre | À l'époque de Kaibyaku Hey, l'honneur d'Izanagi est Mikoto, qui a huit tonnerres sur Yomotsu Hirasaka. On dit qu'il frappa le fruit de la pêche sur le gravier afin de le rejeter - le fruit de la pêche du Kamiyo était une branche de cet arbre.'
  time_s = time.perf_counter()
  cache = None
  for i in range(times):
    cache = func(s, cache)
  time_e = time.perf_counter()
  return time_e - time_s


def main():
  d = {
    'janome': stopwatch(use_janome), 
    'sudachi': stopwatch(use_sudachi), 
    'ginza': stopwatch(use_ginza), 
    'mecab': stopwatch(use_mecab), 
    'fugashi': stopwatch(use_fugashi), 
    'tinysegmenter': stopwatch(use_tinysegmenter)
    }
  d = sorted(d.items(), key=lambda x:x[1])
  print('\n'.join(map(str, d)))


if __name__ == '__main__':
  main()

résultat


('mecab', 0.09558620000007068)
('fugashi', 0.1353556000003664)
('tinysegmenter', 0.655696199999511)
('janome', 3.070499899999959)
('sudachi', 5.18910169999981)
('ginza', 9.577376000000186)

Impressions

--Sora MeCab n'est pas une implémentation Python mais native, donc ** écrasante **, je savais ――Je pensais que ce serait plus lourd en fonction de la commodité et de la précision. --tinysegmenter est une implémentation Python car son objectif est spécialisé pour le partage, mais il est rapide. ――Comme prévu, la vitesse du janome est différente de celle du sudachi et du ginza. --Comparaison de la vitesse pour la première fois

c'est tout

Recommended Posts

Comparaison de vitesse de partage en Python / janome, sudachi, ginza, mecab, fugashi, tinysegmenter
Comparaison de la vitesse de la perspective XML Python
Comparaison des modules de conversion japonais en Python3
[Python3] Comparaison de vitesse, etc. sur la privation de numpy.ndarray
Évaluation de la vitesse de sortie du fichier CSV en Python
Comparaison du code de moyenne mobile exponentielle (EMA) écrit en Python
Comparaison de l'utilisation des fonctions d'ordre supérieur dans Python 2 et 3
AtCoder ABC151 Problème D Comparaison de la vitesse en C ++ / Python / PyPy
Comparaison de la gestion des trames de données en Python (pandas), R, Pig
Comparaison de vitesse de Python, Java, C ++
Comparaison d'objets nuls en Python
Jugement d'équivalence d'objet en Python
Comparaison de 4 types de frameworks Web Python
Implémentation du tri rapide en Python
Comparaison de la vitesse de calcul en implémentant python mpmath (calcul de précision arbitraire) (Note)
Fonction pour ouvrir un fichier en Python3 (différence entre open et codecs.open et comparaison de vitesse)