Нахождение синонимов и связанных слов с данным словом - PullRequest
0 голосов
/ 26 марта 2020

Чего я хочу добиться, так это найти все связанные, похожие, синонимы, связанные слова с данным словом. Например, если я дам слово:

virus ожидаемый результат может быть bacteria, medicine, illnes, coronavirus et c ..

В основном все, что приходит на ум, когда вы думаете об этом слове.

Есть ли какой-нибудь API на основе AI, может быть, AWS или служба движка Google Cloud, с помощью которой я могу достичь этого результата? или база данных с открытым исходным кодом и / или инструмент?

Ответы [ 2 ]

1 голос
/ 26 марта 2020

Попробуйте

https://www.datamuse.com/api/

Это именно то, что вы ищете, и это бесплатно.

0 голосов
/ 31 марта 2020

Это будет делать то, что вы хотите.

import pandas as pd
import nltk.corpus
from nltk.corpus import stopwords, wordnet
from nltk.tokenize import word_tokenize
from nltk.stem import PorterStemmer, WordNetLemmatizer
from collections import defaultdict
from nltk.corpus import wordnet   
from nltk.tokenize import word_tokenize


df = pd.read_csv("C:\\your_path\\synonyms_antonyms.csv")


# pick a field from a dataframe; convert to text and make all lower case
df['review_text'] = df['review_text'].astype('str')
df['review_text'] = df['review_text'].str.lower()
df['review_text'] = df['review_text'].str.split(',')

df.dtypes


my_list = df['review_text'].values.tolist()

s = ','.join(str(v) for v in my_list)


type(s)
tokens = word_tokenize(s)

# Store results in a dict where key is token and value is a set of synonyms and antonyms 
tokens_syns, tokens_ant = defaultdict(set), defaultdict(set)

for token in tokens:
    for synset in wordnet.synsets(token):
        for lemma in synset.lemmas():
            tokens_syns[token].add(lemma.name()) # Add the synonyms
            if lemma.antonyms():    # Check if antonyms are available
                tokens_ant[token].add(lemma.antonyms()[0].name()) # Add antonyms


# Check for 'skin'
token = 'skin'
print(f'For the word "{token}":')
print('The synonyms are:', tokens_syns[token])
print('The antonyms are:', tokens_ant[token])


# Conclusion:
For the word "skin":
The synonyms are: {'scramble', 'pelt', 'shinny', 'pare', 'cutis', 'hide', 'shin', 'bark', 'sputter', 'struggle', 'clamber', 'scrape', 'tegument', 'peel', 'skin'}
The antonyms are: set()
...