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.
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.
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()
create_similar_words.py wards.csv wnjpn.db
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
similar_words.csv
développement de,développement
・
・
・
se réunir,Troupeau,Takaru
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