Faisons une analyse morphologique en Java. Considérant que ce sera un prérequis dans divers autres articles, je résumerai jusqu'à la vérification du fonctionnement.
Il fait référence au processus de division d'un document en les plus petites unités significatives telles que les mots. C'est l'une des techniques les plus couramment utilisées pour amener les machines à traiter le langage.
Il existe de nombreux autres termes dans cet article, Tout d'abord, le contrôle de fonctionnement est décrit, et chaque terme est mentionné en annexe.
La politique est d'ajouter la bibliothèque Kuromoji au-dessus de Spring Boot & Gradle. Si vous êtes de la construction de l'environnement, veuillez vous référer à ce qui suit. ⇒ Introduction à Spring Boot ... C'est bien, alors j'en suis sûr!
environnement | un service/version |
---|---|
Environnement d'exécution | Windows10 |
Environnement de développement | eclipse Oxygen.2 Release (4.7.2)Version Java |
langage de développement | Java 8 |
Framework | SpringBoot 2.1.3 |
La bibliothèque de Kuromoji semble se trouver à Maven Central, Cette fois, j'ai décidé de le récupérer dans les codelibs.
Ajouté aux référentiels et aux dépendances comme suit. Effectuez ensuite une actualisation de Gralde pour mettre à jour les dépendances.
build.gralde
plugins {
id 'org.springframework.boot' version '2.1.3.RELEASE'
id 'java'
}
apply plugin: 'io.spring.dependency-management'
group = 'com.lab.app.ketman'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
repositories {
mavenCentral()
//ajouter à
maven {
url "http://maven.codelibs.org"
}
//Jusque là
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.0.0'
//ajouter à
implementation 'org.codelibs:lucene-analyzers-kuromoji-ipadic-neologd:7.6.0-20190325'
//Jusque là
runtimeOnly 'org.springframework.boot:spring-boot-devtools'
runtimeOnly 'org.postgresql:postgresql'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
Le résultat de l'analyse est stocké dans l'objet Attribute. Obtenez les informations souhaitées en les déclarant comme une variable.
Attribute | Aperçu |
---|---|
CharTermAttribute | Représentation de la phrase analysée telle quelle |
ReadingAttribute | Lecture de la morphologie |
OffsetAttribute | De quel caractère l'élément morphologique apparaît-il |
PartOfSpeechAttribute | Informations sur les paroles des parties |
BaseFormAttribute | prototype |
InflectionAttribute | Utilisation |
KuromojiSample
public class KuromojiSample {
//Renvoie une liste d'entités Kuromoji en retour
public List<KuromojiEntity> kuromojineologd(String src){
List<KuromojiEntity> keList = new ArrayList<KuromojiEntity>();
try(JapaneseTokenizer jt =
new JapaneseTokenizer(null, false, JapaneseTokenizer.Mode.NORMAL)){
jt.setReader(new StringReader(src));
jt.reset();
while(jt.incrementToken()){
CharTermAttribute ct = jt.addAttribute(CharTermAttribute.class);
ReadingAttribute ra = jt.addAttribute(ReadingAttribute.class);
OffsetAttribute oa = jt.addAttribute(OffsetAttribute.class);
PartOfSpeechAttribute posa = jt.addAttribute(PartOfSpeechAttribute.class);
BaseFormAttribute bfa = jt.addAttribute(BaseFormAttribute.class);
InflectionAttribute ifa = jt.addAttribute(InflectionAttribute.class);
System.out.println(
ct.toString()
+ " | " + ra.getReading()
+ " | " + oa.startOffset()
+ " | " + posa.getPartOfSpeech()
+ " | " + bfa.getBaseForm()
+ " | " + ifa.getInflectionForm()
+ " | " + ifa.getInflectionType());
}
} catch (IOException e) {
e.printStackTrace();
}
return keList;
}
}
KuromojiSample
@Controller
public class SampleKuromojiController {
KuromojiSample ks = new KuromojiSample();
@RequestMapping("/kuromoji")
public String index(Model model) {
String sentence = "neologd peut interpréter Yuru-chara comme une nomenclature appropriée.";
ks.kuromojineologd(sentence);
return "index";
}
}
Le dictionnaire de neologd semble être divisé ainsi. Il est caractéristique que la lecture inclue Jiccouiinkai.
neologd |Neologdy| 0 |nom-Nom propre-Général| NEologd | null | null
Tu|Kun| 7 |nom-suffixe-Nom d'une personne| null | null | null
Est|C| 8 |Particule-Assistance| null | null | null
Yuru Chara|Grand Prix Yuru Chara Jiccoui Inkai| 9 |nom-Nom propre-Nom d'une personne-Général| null | null | null
À|Wo| 14 |Particule-Assistant de cas-Général| null | null | null
Nom propre|Koyu Meishi| 15 |nom-Général| null | null | null
Comme|Toshite| 19 |Particule-Assistant de cas-Langage commun| null | null | null
Interprétation|Kaishaku| 22 |nom-Changer de connexion| null | null | null
Fini|Deki| 24 |verbe-Indépendance|Peut faire|Type continu|Un pas
Masu|truite| 26 |Verbe auxiliaire| null |Forme basique|Spécial / masse
。 | 。 | 28 |symbole-Phrase| null | null | null
Extrait de 1. Overview of Lucene
Lucene est un moteur de recherche en texte intégral de type indexation 100% PureJava développé par Jakarta Project 1. (Un index est un index attaché pour une recherche rapide.) Lucene lui-même est une bibliothèque, pas un programme complet, En utilisant l'API fournie par Lucene, vous pouvez facilement créer un programme de recherche en texte intégral facile à utiliser. De plus, comme il est écrit en Java, il peut être facilement adapté aux applications Web. Lucene lui-même ne peut pas analyser le japonais, mais il est possible de rechercher du japonais en utilisant un programme d'analyse morphologique.
La maintenance des informations (dictionnaire) données aux machines dans le langage naturel évolutif jour et nuit est l'un des problèmes. L'idée est de résoudre ce problème en rampant sur le Web. Extrait de neologd / mecab-ipadic-neologd
mecab-ipadic-NEologd est un dictionnaire système pour MeCab personnalisé en ajoutant de nouveaux mots dérivés de nombreuses ressources linguistiques Web. Lors de l'analyse de documents sur le Web, il est recommandé d'utiliser ce dictionnaire avec le dictionnaire système standard (ipadic). (Omis) Avantages Environ 3,12 millions de paires (y compris les entrées en double) de la couche de surface (notation) et des paires de mots frigana telles que des expressions uniques qui ne peuvent pas être correctement divisées par le dictionnaire système standard de MeCab sont enregistrées. Ce dictionnaire est mis à jour automatiquement sur le serveur de développement Sera mis à jour au moins deux fois par semaine Lundi et jeudi En utilisant les ressources linguistiques sur le Web, de nouvelles expressions uniques peuvent être enregistrées au moment de la mise à jour Les ressources actuellement utilisées sont: ・ Vider les données du mot-clé Hatena ・ Télécharger les données du code postal … (Omis) Inconvénients Classification insuffisante des expressions appropriées Par exemple, certains noms de personnes et noms de produits sont classés dans la même catégorie d'expression unique. Les mots qui ne sont pas des expressions uniques sont également enregistrés en tant qu'expressions uniques …
Dans l'exemple de code, l'argument (JapaneseTokenizer.Mode.NORMAL) a été donné, Il existe également des modes de recherche et d'extension, chacun avec les fonctionnalités suivantes.
Extrait de About Kuromoji
Mode normal Après avoir initialisé le mode normal, l'analyse morphologique est effectuée dans ce format par défaut.
Mode de recherche Un mot qui combine plusieurs mots tels que "Nihon Keizai Shimbun" est appelé "Japon"|Économie|Il analyse séparément comme un journal. Lorsqu'il est utilisé en combinaison avec un moteur de recherche plein texte, il est pratique car le Nihon Keizai Shimbun peut également être recherché par "économie" ou "journal".
Étend le mode En plus du mode Recherche, traitez les mots inconnus comme un uni-gramme. Par exemple, "mobage" est "mo"|Ba|Ge|- "Est divisé en chaque caractère. Une fonction qui semble réduire le risque de ne pas rechercher des mots inconnus.
Si vous voulez l'obtenir auprès de Maven Central, vous devez le faire comme ceci. [Home » com.atilika.kuromoji » kuromoji-ipadic » 0.9.0] (https://mvnrepository.com/artifact/com.atilika.kuromoji/kuromoji-ipadic/0.9.0)
// https://mvnrepository.com/artifact/com.atilika.kuromoji/kuromoji-ipadic
compile group: 'com.atilika.kuromoji', name: 'kuromoji-ipadic', version: '0.9.0'
Recommended Posts