Генератор предложений с использованием тезауруса

Я создаю приложение в .NET.

Я получил запущенное имя приложения http://www.spinnerchief.com/. Он сделал то, что мне было нужно, но я не получил никакой помощи от Google. Мне нужны функциональные результаты для моего приложения, где пользователи могут дать одно предложение, а затем пользователь может получить одно и то же предложение, но оно сформулировано по-разному.

Вот пример желания, который я хочу.

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

Панкай - отличный человек.     Панкадж - превосходный человек.
    Панкадж - приемлемый парень.
    Панкай - прекрасный чувак.
    Панкай - превосходный мужчина.
    Панкадж - хороший человек.
    Панкай - великолепный джентльмен.

Ответ 1

Чтобы сделать это правильно для любого произвольного предложения, вам понадобится выполнить естественный анализ исходного предложения. Вы можете посмотреть в библиотеку SharpNLP - это бесплатная библиотека инструментов для обработки естественного языка для С#/. NET.

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

Дополнительное соображение, которое вам необходимо решить (если вы не используете библиотеку НЛП), является следствием. В большинстве языков некоторые части речи сопряжены/модифицированы (глаголы на английском языке) на основе предмета, к которому они относятся (или объекта, говорящего или времени предложения).

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

Ответ 2

Для этого лучше всего использовать WordNet и это hyponym/hypernym отношения. Существует библиотека WordNet.Net. Для каждого слова, которое вы хотите чередовать, вы можете либо получить его гиперним (то есть для человека, гиперним означает "человек - это своего рода..." ) или гипоним ( "X - это своего рода человек" ). Затем просто замените слово, которое вы чередуете.

Вы захотите убедиться, что у вас есть правильная часть речи (то есть существительное, прилагательное, глагол...), и есть также проблема чувств, которая может привести к некоторым нежелательным чередованиям (смысл №1 - это наиболее распространенный).

Ответ 3

Я ничего не знаю о .Net, но вы должны изучить функцию словаря (я уверен, что есть одна или, по крайней мере, библиотека, которая упрощает процесс, если нет).

Затем вам придется пройти через строку и пропустить слова типа "есть" или "а". Только взятие слов, для которых вы хотите иметь синонимы.

После этого его довольно просто, чтобы цикл выплевывал ваши предложения.

Удачи.