Генератор предложений с использованием тезауруса - PullRequest
10 голосов
/ 21 сентября 2010

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

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

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

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

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

Ответы [ 3 ]

7 голосов
/ 21 сентября 2010

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

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

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

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

3 голосов
/ 21 сентября 2010

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

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

0 голосов
/ 21 сентября 2010

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

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

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

Удачи.

...