Implementierter Code zum Erkennen von Synonymen mithilfe des japanischen WordNet. Die Spezifikation verwendet eine CSV-Datei mit Wörtern als Eingabe, sucht nach Synonymen aus der Wortgruppe, listet sie auf und gibt eine Liste von Synonymen als Text aus. Die Implementierung basiert hauptsächlich auf dem Material von hier.
Japanisches WordNet kennen Da das Netzwerk visualisiert wird, ist es leicht intuitiv vorstellbar. Wenn Sie an der Definition von WordNet interessiert sind, lesen Sie diese bitte.
Hier ist die offizielle Website. Ein japanisches Bedeutungswörterbuch, das von der Informations- und Kommunikationsforschungsorganisation (NICT) der National Research and Development Corporation entwickelt wurde. Für diese Implementierung muss die offizielle Website [Japanisches Wordnet und englisches WordNet in einer SQLite3-Datenbank] heruntergeladen werden (http://compling.hss.ntu.edu.sg/wnja/data/1.1/wnjpn.db.gz). .. Dateiname herunterladen: wnjpn.db.gz Wenn Sie dies entpacken, können Sie die Datenbankdatei der Wörterbuchdaten abrufen. Durch Laden dieser Datenbank mit Python können Synonyme erkannt werden.
create_similar_words.py
import sqlite3
import csv
import re
#DB-Verbindung
conn = sqlite3.connect("wnjpn.db")
# ui
csvfile = 'words.csv'
outfile = 'similar_words.txt'
'''functions
csv_input:Rückgabeliste durch Eingabe von csv
SearchSimilarWords:Erstellen Sie eine Synonymliste und geben Sie sie zurück
create_similar_wordlst:Synonymlistenformung
save_synonyms:Synonymliste speichern
'''
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]
#Feststellen, ob das Wort in Wordnet vorhanden ist
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:
#Speichern Sie ähnliche Wörter in einer 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
Dieses Mal wird für eine einfache Implementierung angenommen, dass die Zeichenfolge nur in eine Spalte eingefügt wird. Darüber hinaus ist es ein Mechanismus zum Suchen nach Synonymen innerhalb der Zeichen in ** words.csv. ** ** **
words.csv
Entwicklung von
Entwicklung
・
・
・
zusammenkommen
Herde
Takaru
similar_words.csv
Entwicklung von,Entwicklung
・
・
・
zusammenkommen,Herde,Takaru
Ich habe ein Skript erstellt, das nach Synonymen in Zeichen in CSV sucht und diese in CSV ausgibt. Wenn Sie Fragen oder Mängel in der Implementierung haben, weisen Sie bitte darauf hin. LGTM ist auch willkommen! Danke fürs Lesen.
Recommended Posts