J'ai fait un package qui peut comparer des analyseurs morphologiques avec Python

Contenu de cet article

Caractéristiques du package

Comment utiliser

Préparation

Créer un fichier a été configuré dans le référentiel Github.

Si vous pouvez le faire, installez-le manuellement. Veuillez vous référer à cette section pour l'installer.

Exemple de code

Un exemple est montré dans python3.x. Si vous voulez voir un exemple pour python2.x, [exemple de code](https://github.com/Kensuke- Voir Mitsuzawa / JapaneseTokenizers / blob / master / examples / examples.py).

Le système de la partie du discours est résumé en détail sur cette page. Le système de partie de la parole de Juman / Human ++ est également décrit, donc si vous souhaitez effectuer un filtrage de partie de la parole avec Juman / Human ++, veuillez le changer et l'utiliser.

En passant, vous pouvez également utiliser le dictionnaire neologd dans Human / Human ++. Veuillez consulter cet article. J'ai créé un script pour rendre le dictionnaire neologd utilisable dans juman / juman ++

La seule différence entre Mecab, Juman / Human ++ et Kytea est la classe qu'ils appellent. Il hérite de la même classe commune.

Analyse morphologique avec mecab

Présentation de l'utilisation de la version 1.3.1.

import JapaneseTokenizer
#Sélectionnez un type de dictionnaire."neologd", "all", "ipadic", "user", ""Peut être sélectionné.
mecab_wrapper = JapaneseTokenizer.MecabWrapper(dictType='neologd')
#Définissez la partie du mot que vous souhaitez acquérir.
pos_condition = [('nom', '固有nom'), ('adjectif', 'Indépendance')]

sentence = "La République islamique d'Iran, communément appelée Iran, est une république islamique d'Asie occidentale et du Moyen-Orient. Aussi connu sous le nom de Perse ou Perse."
#Division morphologique,Filtrage des mots partiels,Liste complète en une seule ligne
print(mecab_wrapper.tokenize(sentence).filter(pos_condition).convert_list_object())

Ensuite, le résultat ressemble à ceci:

['République islamique d'Iran', 'Iran', 'Asie de l'Ouest', 'moyen-Orient', 'République islamique', 'Perse', 'Perse']

Analyse morphologique avec juman / juman ++

C'est fondamentalement la même chose que mecab. Seule la classe à appeler est différente.

Pour Juman

from JapaneseTokenizer import JumanWrapper
tokenizer_obj = JumanWrapper()
#Définissez la partie du mot que vous souhaitez acquérir.
pos_condition = [('nom', '固有nom'), ('nom', 'Nom du lieu'), ('nom', 'Nom de l'organisation'), ('nom', '普通nom')]

sentence = "La République islamique d'Iran, communément appelée Iran, est une république islamique d'Asie occidentale et du Moyen-Orient. Aussi connu sous le nom de Perse ou Perse."
#Division morphologique,Filtrage des mots partiels,Liste complète en une seule ligne
print(tokenizer_obj.tokenize(sentence).filter(pos_condition).convert_list_object())
['Iran', 'Islam', 'Kyowa', 'Pays', 'Connu comme', 'Iran', 'Ouest', 'Asie', 'moyen-Orient', 'Islam', 'Kyowa', 'Système', 'Pays家', 'Perse', 'Perse']

Pour Juman ++

from JapaneseTokenizer import JumanppWrapper
tokenizer_obj = JumanppWrapper()
#Définissez la partie du mot que vous souhaitez acquérir.
pos_condition = [('nom', '固有nom'), ('nom', 'Nom du lieu'), ('nom', 'Nom de l'organisation'), ('nom', '普通nom')]

sentence = "La République islamique d'Iran, communément appelée Iran, est une république islamique d'Asie occidentale et du Moyen-Orient. Aussi connu sous le nom de Perse ou Perse."
#Division morphologique,Filtrage des mots partiels,Liste complète en une seule ligne
print(tokenizer_obj.tokenize(sentence).filter(pos_condition).convert_list_object())
['Iran', 'Islam', 'République', 'Connu comme', 'Iran', 'Ouest', 'Asie', 'moyen-Orient', 'Islam', 'Système républicain', 'Nation', 'Perse', 'Perse']

En fait, si le texte est aussi décent que Wikipedia, Human et Juman ++ ne changeront pas grand-chose. Lorsque vous utilisez Juman ++, c'est un peu lent uniquement au premier appel. En effet, la mise en mémoire du fichier modèle prend du temps. A partir de la deuxième fois, le processus qui continue de fonctionner est appelé, donc cette lenteur disparaît.

Analyse morphologique avec kytea

Tout est pareil sauf pour mecab, juman et le nom de la classe.

from JapaneseTokenizer import KyteaWrapper
tokenizer_obj = KyteaWrapper()
#Définissez la partie du mot que vous souhaitez acquérir.
pos_condition = [('nom',)]

sentence = "La République islamique d'Iran, communément appelée Iran, est une république islamique d'Asie occidentale et du Moyen-Orient. Aussi connu sous le nom de Perse ou Perse."
#Division morphologique,Filtrage des mots partiels,Liste complète en une seule ligne
print(tokenizer_obj.tokenize(sentence).filter(pos_condition).convert_list_object())

Historique du développement

Auparavant, j'ai posté l'article de Mecab qui fait quelque chose comme un wrapper contraignant et qui est auto-satisfait. À ce moment-là, je l'ai fait moi-même, donc ça va. Cependant, après cela, j'en suis venu à penser que __ "Je veux que vous essayiez facilement la comparaison des analyseurs morphologiques" __, et j'en suis venu à le faire.

Raison 1 Tout le monde utilise mecab, non?

C'est juste autour de moi, mais je ressens une atmosphère du genre "analyse morphologique? Pour le moment, avec Mecab. Ou autre chose?"

Quand je recherche avec Qiita, il y a 347 résultats pour mecab, mais seulement 17 pour juman. Il y a 3 cas pour «kytea».

Certes, je pense que Mecab est très bon en tant que logiciel. Mais, "Je ne sais rien d'autre, mais il n'y a que Mecab, non?" Est-ce quelque chose de différent, n'est-ce pas? Je pense.

C'est pourquoi la première motivation a été de faire appel que __ "Il y a d'autres que Mecab" __.

Raison 2 Je ne sais pas d'un étranger, non?

Récemment, je suis allé dans la communauté Python étrangère vivant au Japon.

Bien qu'ils s'intéressent au traitement japonais, ils ne savent pas quel analyseur morphologique doit être utilisé.

Ils le recherchent, mais ils ne comprennent pas vraiment la différence, alors ils disent quelque chose de foiré.

Ci-dessous, la mystérieuse logique que j'ai entendue jusqu'à présent

Je pensais que la raison pour laquelle une telle logique mystérieuse était apparue était que l'information n'était pas préparée et ne pouvait pas être comparée.

Il est difficile d'organiser les informations, mais cela peut faciliter les comparaisons. C'est pourquoi je l'ai fait. Aussi, j'ai essayé d'écrire tous les documents en anglais. J'ai pensé que ce serait bien si les informations pouvaient être recueillies autant que possible.

Politique de développement

Commun autant que possible

Je l'ai conçu pour qu'il ait la même structure que possible, y compris l'interface. La classe qui exécute le traitement et la classe de données sont toutes communes.

Syntaxe simple autant que possible

Nous avons conçu la syntaxe pour réaliser un "prétraitement de codage à la vitesse la plus rapide". En conséquence, il est devenu une interface qui gère la division morphologique et le filtrage des mots partiels en une seule ligne.


Si vous l'aimez, veuillez donner Star ☆ à Github Repository: bow_tone1:

Nous recherchons également des personnes qui peuvent s'améliorer ensemble. Je voudrais également présenter un analyseur ici. RakutenMA, Chansen ...

Recommended Posts

J'ai fait un package qui peut comparer des analyseurs morphologiques avec Python
J'ai fait un shuffle qui peut être réinitialisé (inversé) avec Python
J'ai fait un module PyNanaco qui peut charger des crédits nanaco avec python
J'ai fait une loterie avec Python.
J'ai créé un démon avec Python
J'ai créé un package pour filtrer les séries chronologiques avec python
J'ai créé un plug-in qui peut faire "Daruma-san tombé" avec Minecraft
J'ai fait un compteur de caractères avec Python
J'ai fait une carte hexadécimale avec Python
J'ai fait un jeu rogue-like avec Python
J'ai fait un simple blackjack avec Python
J'ai créé un fichier de configuration avec Python
J'ai fait un simulateur de neurones avec Python
[python] J'ai créé une classe qui peut écrire rapidement une arborescence de fichiers
J'ai fait une prévision météo de type bot avec Python.
J'ai créé une application graphique avec Python + PyQt5
J'ai essayé de créer un bloqueur de filles pourries sur Twitter avec Python ①
[Python] J'ai créé un téléchargeur Youtube avec Tkinter.
J'ai fait un jeu de cueillette avec Python
Made Mattermost Bot avec Python (+ Flask)
[Python] J'ai créé un utilitaire qui peut accéder au type dict comme un chemin
J'ai créé un outil qui facilite un peu la décompression avec CLI (Python3)
J'ai fait un Twitter BOT avec GAE (python) (avec une référence)
J'ai fait un jeu d'éclairage de sapin de Noël avec Python
J'ai fait un blackjack avec du python!
J'ai enregistré PyQCheck, une bibliothèque qui peut effectuer QuickCheck avec Python, dans PyPI.
J'ai créé une application de notification de nouvelles en ligne avec Python
J'ai créé une VM qui exécute OpenCV pour Python
J'ai créé une image Docker qui peut appeler FBX SDK Python à partir de Node.js
J'ai créé un environnement Python3 sur Ubuntu avec direnv.
J'ai essayé de faire LINE BOT avec Python et Heroku
Un mémo que j'ai touché au magasin de données avec python
J'ai fait un texte Python
J'ai fait un blackjack avec Python.
Une histoire à laquelle j'étais accro après la communication SFTP avec python
J'ai créé wordcloud avec Python.
Une histoire qui a trébuché lorsque j'ai créé un bot de chat avec Transformer
J'ai fait un jeu de frappe simple avec tkinter de Python
J'ai créé une application de livre simple avec python + Flask ~ Introduction ~
J'ai fait un jeu de puzzle (comme) avec Tkinter of Python
J'ai fait une minuterie pomodoro dure qui fonctionne avec CUI
J'ai fait un Line-bot avec Python!
J'ai fait un circuit simple avec Python (AND, OR, NOR, etc.)
[Python] Créez un graphique qui peut être déplacé avec Plotly
J'ai créé une bibliothèque qui lit facilement les fichiers de configuration avec Python
[Python] J'ai créé ma propre bibliothèque qui peut être importée dynamiquement
Je souhaite utiliser un caractère générique que je souhaite décortiquer avec Python remove
[Python] Un mémo que j'ai essayé de démarrer avec asyncio
J'ai créé un formulaire de tweet Nyanko avec Python, Flask et Heroku
J'ai créé beaucoup de fichiers pour la connexion RDP avec Python
[Python] J'ai créé une visionneuse d'images avec une fonction de tri simple.
J'ai créé un chat-holdem de serveur de jeu de poker en utilisant websocket avec python
J'ai fait un programme qui calcule automatiquement le zodiaque avec tkinter
[Python] Un programme qui crée des escaliers avec #