Recherche de synonymes dans la liste de mots (csv) par Python Japanese WordNet

Ce que j'ai fait

Code implémenté pour détecter les synonymes à l'aide de WordNet japonais. La spécification prend un fichier csv avec des mots en entrée, recherche des synonymes dans le groupe de mots, les répertorie et génère une liste de synonymes sous forme de texte. L'implémentation est principalement basée sur le matériel de ici.

À propos de WordNet

Connaître WordNet japonais Puisque le réseau est visualisé, il est facile d'imaginer intuitivement. Si vous êtes intéressé par la définition de WordNet, veuillez la lire.

Ici est le site officiel. Un dictionnaire de sens japonais développé par la National Research and Development Corporation Information and Communication Research Organization (NICT). Cette implémentation nécessite le téléchargement du site officiel Wordnet japonais et WordNet anglais dans une base de données sqlite3. .. Télécharger le nom du fichier: wnjpn.db.gz Si vous décompressez ceci, vous pouvez obtenir le fichier db des données du dictionnaire. En chargeant cette base de données avec Python, il est possible de détecter des synonymes.

la mise en oeuvre

create_similar_words.py


import sqlite3
import csv
import re
#connexion db
conn = sqlite3.connect("wnjpn.db")
# ui
csvfile = 'words.csv'
outfile = 'similar_words.txt'

'''functions
csv_input:Liste de retour en saisissant csv
SearchSimilarWords:Créer et renvoyer une liste de synonymes
create_similar_wordlst:Mise en forme de la liste de synonymes
save_synonyms:Enregistrer la liste des synonymes
'''

def csv_input(path_name):
    rows = []
    with open(path_name,encoding='utf-8') as f:
        reader = csv.reader(f)
        for row in reader:
            rows.append(row)
    return rows


def SearchSimilarWords(word):
    word = ','.join(word)
    cur = conn.execute("select wordid from word where lemma='%s'" % word)
    word_id = 99999999  #temp
    for row in cur:
        word_id = row[0]

    #Déterminer si le mot existe dans Wordnet
    if word_id==99999999:
        return
    cur = conn.execute("select synset from sense where wordid='%s'" % word_id)
    synsets = []
    for row in cur:
        synsets.append(row[0])
    simdict = []
    for synset in synsets:
        cur1 = conn.execute("select name from synset where synset='%s'" % synset)
        cur2 = conn.execute("select def from synset_def where (synset='%s' and lang='jpn')" % synset)
        cur3 = conn.execute("select wordid from sense where (synset='%s' and wordid!=%s)" % (synset,word_id))
        for row3 in cur3:
            target_word_id = row3[0]
            cur3_1 = conn.execute("select lemma from word where wordid=%s" % target_word_id)
            for row3_1 in cur3_1:
                #Stocker des mots similaires dans une liste
                simdict.append(row3_1[0])
    return simdict


def create_similar_wordlst(full_word):
    parent = []
    child = []
    with open(csvfile, encoding='utf-8') as f:
        reader = csv.reader(f)
        for row in reader:
            child = []
            synonym = SearchSimilarWords(row)
            if not synonym is None:
                row = ','.join(row)
                child.append(row)
                for f_row in full_word:
                    f_row = ','.join(f_row)
                    for syn in synonym:
                        if f_row == syn:
                            child.append(syn)
            if len(child) > 1:
                parent.append(set(child))
    # print(parent)
    return parent


def save_synonyms(lst):
    norlst = []
    for row in lst:
        row = list(row)
        row = ','.join(row)
        norlst.append(row)
    norlst = set(norlst)
    with open(outfile, mode='w') as f:
        for row in norlst:
            f.write(row+'\n')


def main():
    full_word = csv_input(csvfile)
    save_synonyms(create_similar_wordlst(full_word))


if __name__ == "__main__":
    main()

Structure des dossiers

create_similar_words.py wards.csv wnjpn.db

Exemple de fichier d'entrée

Cette fois, pour une implémentation simple, on suppose que la chaîne de caractères est insérée dans une seule colonne. De plus, il s'agit d'un mécanisme de recherche de synonymes dans les caractères de ** words.csv. ** **

words.csv


développement de
développement
・
・
・
se réunir
Troupeau
Takaru

Exemple de fichier de sortie

similar_words.csv


développement de,développement
・
・
・
se réunir,Troupeau,Takaru

Résumé

J'ai créé un script qui recherche les synonymes dans les caractères en csv et les génère en csv. Veuillez signaler tout contenu imprécis ou imperfections dans la mise en œuvre. LGTM est également le bienvenu! Merci pour la lecture.

Recommended Posts

Recherche de synonymes dans la liste de mots (csv) par Python Japanese WordNet
Essayez une recherche similaire de recherche d'images à l'aide du SDK Python [Recherche]
Résolvez le problème japonais lors de l'utilisation du module CSV en Python.
[Python] Maîtrisez la lecture des fichiers csv. Liste des principales options pour pandas.read_csv.
Sortie CSV de la recherche Google avec [Python]! 【Facile】
vprof - J'ai essayé d'utiliser le profileur pour Python
Pandas Python: recherchez DataFrame à l'aide d'expressions régulières
Recherche affinée des valeurs de race Pokemon à l'aide de Python
Appeler Polly à partir du kit SDK AWS pour Python
[Python] Comment supprimer les valeurs en double de la liste
Python: texte japonais: caractéristique du discours à partir de la similitude des mots
[Boto3] Rechercher des utilisateurs Cognito avec l'API List Users
Python: texte japonais: caractéristique de la parole à partir de la continuité des mots
Étude de Python Hour8: Utilisation de packages
Liste des erreurs Python (japonais)
Rechercher sur Twitter avec Python
Analysez l'API Researchmap avec Python et créez automatiquement un fichier Word pour la liste des succès
Python + ImageMagick> Découper les caractères de la liste des caractères au format BMP (pour la conversion BMP de la police Shinonome)
Contrôlez la lumière intelligente «Yeelight» de Python sans utiliser le cloud
Conversion de Pandas DataFrame en System.Data.DataTable à l'aide de Python pour .NET
J'ai essayé d'utiliser la bibliothèque Python de Ruby avec PyCall
Rechercher des fichiers volumineux sous Linux à partir de la ligne de commande
Copiez récursivement les fichiers du répertoire directement sous le répertoire en utilisant Python
Notes diverses sur l'utilisation de python pour les projets
Google recherche la chaîne sur la dernière ligne du fichier en Python
Exportez les informations produit au format CSV à l'aide de l'API de recherche de produits Rakuten [Python]
Extraire la valeur la plus proche d'une valeur à partir d'un élément de liste en Python
Aplatir à l'aide du rendement Python de
Liste Python, pour instruction, dictionnaire
Cherchons à partir de la ligne
Liste de recherche des éléments en double
Algorithme de recherche utilisant word2vec [python]
#List Python pour les super débutants
tesseract-OCR pour Python [version japonaise]
Obtenez des synonymes japonais avec Python
Recherche par image de la pellicule en utilisant Pythonista3
J'ai essayé d'utiliser Kwant, un module python pour le calcul du transport quantique
Comment obtenir des abonnés et des abonnés de Python à l'aide de l'API Mastodon
[Python] Notification LINE des dernières informations à l'aide de la recherche automatique Twitter
[Python of Hikari-] Chapitre 05-03 Syntaxe de contrôle (pour les éléments d'extraction d'instructions de la liste-)
Touchons l'API Vision de Google de Python pour le moment
De l'introduction de JUMAN ++ à l'analyse morphologique du japonais avec Python
python Remarque: map -faire la même chose pour chaque élément de la liste
Liste des dépêches en cas de catastrophe du service d'incendie de la ville de Sapporo [Python]
Vider, restaurer et rechercher des requêtes d'instances de classe Python à l'aide de mongodb
Essayez d'utiliser FireBase Cloud Firestore avec Python pour le moment