2016-07-18 5 views
0

В принципе, я хочу создать программу, которая принимает предложение/абзац как пользовательский ввод, ищет синоним для каждого слова и заменяет слово синоним. Программа, которую я создал до сих пор, работает отлично, но есть некоторые ошибки/ошибки пользователя/ошибки. Вот что я получил прямо сейчас:Программа Python, которая заменяет каждое слово в предложении синонимом

response=input("Enter what you want to thesaurize") 
orig=response #puts user input into a string 
num=orig.count(" ")+1 #finds number of words in the sentence 
orig=orig.split(" ") #turns the sentence into a list of its words 
new=[] #creates a new list to put the new words in, in case I'd want to go back to the original sentence for any reason 
for i in range (num): 
     if orig[i] not in badWords: #makes sure that the word is not a no-synonym word like "the" or "be" 
      new.insert(i, myFuncs.replace(orig[i])) #the replace function (which I put in a separate module for neatness purposes) looks up the word on thesaurus.com and replaces it with a synonym 
     else: 
      new.insert(i, orig[i]) #If the word is an excluded word, it simply leaves it alone and keeps it in the new sentence 

final="" #creates an empty string to put the new words in 
for j in range(0,num): 
    final=final+new[j]+" " #turns the list of new words into a string that can be printed 
print(final) 

Опять же, это работает отлично, но есть некоторые проблемы. В основном я уменьшил его до 4 основных проблем, которые возникают:

1) Слово не имеет синонима, но все еще не было в списке исключенных слов;

2) Вводится неправильное значение слова или возвращается значение, которое не имеет смысла в контексте ввода пользователя;

3) Неправильно напряженный глагол возвращаются и

4) Когда существительное вводятся глагол этого слова возвращается, или наоборот (то есть «Я гриль курица» превращается в " Я буду стрелять из курицы "или что-то в этом роде).

В принципе, я могу исправить все эти проблемы вручную, попросив пользователя пройти каждое слово, которое не имеет смысла, а затем с помощью вложенных if-else и других структур управления, чтобы направлять их путем выбора правильного слова, но Я думаю, что это будет утомительно для пользователя и разрушит весь смысл, особенно если они войдут во что-то с большим количеством слов.

Так что в основном я спрашиваю, какие из этих проблем я могу автоматизировать? То есть, есть ли способ написать код, чтобы компьютер мог распознать любую из этих проблем? Фиксация их - легкая часть, но на самом деле получение программы для распознавания логических ошибок вместо того, чтобы заставить пользователя иметь дело с ней, является трудной частью.

+4

Это сложная проблема в области семантического разбора. Некоторые из нас не могут быть разрешены на SO. Если вы не знакомы, взгляните на обработку естественного языка и машинное обучение. – erip

+0

Чтобы проверить правильность замены, вы можете использовать любое программное обеспечение для перевода начального и измененного сообщений на другой язык. Если результаты перевода обоих расценок совпадают, ваша замена была правильной. Речь идет о проблемах (2) и (4). – Ilya

+1

Вы можете взглянуть на NLTK (Natural Language ToolKit), предоставляя ['WordNet'] (http://www.nltk.org/_modules/nltk/corpus/reader/wordnet.html), которые поддерживают поиск синонимов. – albert

ответ

3

Вы должны изучить НЛП (обработка естественного языка), особенно маркировка POS (Part-of-speech tagging). Пометка POS будет отмечать каждое слово текстового тела в соответствии с категорией слов, например, глаголом, существительным и т. Д. И грамматической формой слова. Отличная библиотека Python для поиска будет NLTK, Инструментарий Natural Language Toolkit.

Вот небольшой пример с сайта проекта.

>>> import nltk 
>>> sentence = """At eight o'clock on Thursday morning 
... Arthur didn't feel very good.""" 
>>> tokens = nltk.word_tokenize(sentence) 
>>> tokens 
['At', 'eight', "o'clock", 'on', 'Thursday', 'morning', 
'Arthur', 'did', "n't", 'feel', 'very', 'good', '.'] 
>>> tagged = nltk.pos_tag(tokens) 
>>> tagged[0:6] 
[('At', 'IN'), ('eight', 'CD'), ("o'clock", 'JJ'), ('on', 'IN'), 
('Thursday', 'NNP'), ('morning', 'NN')] 

После пометки предложения извлечь только слова-категорию, которые вы хотите для поиска синонимов, нормализуют слова в настоящее время, делать поиск синонимов и преобразовать результат обратно в правильном напряжение и заменить нужное слово.

Решение вопроса о времени также может быть достигнуто с помощью механизмов НЛП, а также преобразования слов из нормальной формы в определенное время.

Смежные вопросы