Geschwindigkeitsvergleich des Teilens in Python / Janome, Sudachi, Ginza, Mecab, Fugashi, Tinysegmenter

Geschwindigkeitsvergleich der morphologischen Analyse in Python

Vergleich

Vorbereitung

Referenz: 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- und Ausführungsergebnisse

Code anzeigen

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 = 'Es war einmal, es war einmal ein großer Pfirsichbaum in den Tiefen eines tiefen Berges. Es kann nicht genug sein, nur groß zu sein. Die Zweige dieses Pfirsichs breiteten sich über den Wolken aus, und die Wurzeln dieses Pfirsichs erstreckten sich sogar bis zum Land Huangquan am Boden der Erde. Alles ist Himmel und Erde | Um die Zeit von Kaibyaku Hey, Izanagis Ehre ist Mikoto, der acht Donner auf Yomotsu Hirasaka hat. Es wird gesagt, dass er die Pfirsichfrucht auf den Kies geschlagen hat, um sie zu verwerfen - die Pfirsichfrucht des Kamiyo war ein Zweig dieses Baumes.'
  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()

Ergebnis


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

Impressionen

--Sora MeCab ist keine Python-Implementierung, sondern nativ, also ** überwältigend **, wusste ich ――Ich dachte, es wäre schwerer, je nach Komfort und Genauigkeit. --tinysegmenter ist eine Python-Implementierung, da der Zweck auf das Teilen spezialisiert ist, aber schnell ist ――Wie erwartet unterscheidet sich die Geschwindigkeit von Janome von der von Sudachi und Ginza.

das ist alles

Recommended Posts

Geschwindigkeitsvergleich des Teilens in Python / Janome, Sudachi, Ginza, Mecab, Fugashi, Tinysegmenter
Geschwindigkeitsvergleich der Python-XML-Perspektive
Vergleich japanischer Konvertierungsmodule in Python3
[Python3] Geschwindigkeitsvergleich usw. über den Entzug von numpy.ndarray
Geschwindigkeitsbewertung der Ausgabe von CSV-Dateien in Python
Vergleich des in Python geschriebenen EMA-Codes (Exponential Moving Average)
Vergleich der Verwendung von Funktionen höherer Ordnung in Python 2 und 3
AtCoder ABC151 Problem D Geschwindigkeitsvergleich in C ++ / Python / PyPy
Vergleich der Datenrahmenbehandlung in Python (Pandas), R, Pig
Geschwindigkeitsvergleich von Python, Java, C ++
Nullobjektvergleich in Python
Objektäquivalenzbeurteilung in Python
Vergleich von 4 Arten von Python-Webframeworks
Implementierung der schnellen Sortierung in Python
Vergleich der Berechnungsgeschwindigkeit durch Implementierung von Python mpmath (willkürliche Genauigkeitsberechnung) (Hinweis)
Funktion zum Öffnen einer Datei in Python3 (Unterschied zwischen open und codecs.open und Geschwindigkeitsvergleich)