Сжатие предложений с использованием НЛП

Используя машинный перевод, могу ли я получить очень сжатую версию предложения, например. Мне бы очень хотелось выпить вкусную вкусную чашку кофе будет переведено как Я хочу кофе. Предоставляет ли какая-либо из машин НЛП такую ​​функциональность?

У меня есть несколько исследовательских работ, посвященных генерации парафаз и сжатие предложений. Но есть ли какая-нибудь библиотека, которая уже реализовала это?


person Codevalley    schedule 22.10.2011    source источник
comment
Я не знаю инструмента, который делает это, но синтаксический анализ с последующим удалением наречий в прилагательных фразах и некоторых других конструкций может дать вам достойную основу.   -  person Fred Foo    schedule 22.10.2011
comment
Вы можете удалить прилагательные/наречия, но то, что вы указываете в приведенном выше примере, является сжатием форм глагола, т.е. «очень хотел бы иметь» -> «хочу». Кроме того, «вкусная чашка кофе» на «кофе»? Есть много ситуаций, когда вы хотите получить корень существительного, скажем, «городской автосалон». Я не знаю инструмента для этого.   -  person nflacco    schedule 23.10.2011
comment
Я также разместил бы сообщение на metaoptimize.com/qa/. Вы можете попытаться связаться с Джеймсом Кларком по адресу jamesclarke.net .   -  person cyborg    schedule 23.10.2011
comment
Я не могу не думать о рекламе Suntory в «Трудностях перевода»: «Повернись к камере… с напряжением». youtube.com/watch?v=FiQnH450hPM   -  person Iterator    schedule 14.02.2012
comment
Согласно нашему руководству по теме, некоторые вопросы по-прежнему не относятся к теме, даже если они соответствуют одному из перечисленные выше категории:...Вопросы с просьбой порекомендовать или найти книгу, инструмент, библиотеку программного обеспечения, учебник или другой сторонний ресурс не относятся к теме...   -  person Robert Columbia    schedule 20.07.2018


Ответы (4)


Если вы хотите сделать свои предложения краткими, не теряя при этом важной идеи этих предложений, вы можете сделать это, просто извлекая триплет подлежащее-сказуемое-дополнение.

Говоря об инструментах/движке, я рекомендую вам использовать Stanford NLP. Выходные данные его анализатора зависимостей уже предоставляют субъект и объект (если есть). Но вам все равно нужно сделать некоторую настройку, чтобы получить желаемый результат.

Вы можете загрузить Stanford NLP и ознакомиться с примерами использования здесь

Я нашел документ, связанный с вашим вопросом. Ознакомьтесь с Упрощение текста с помощью типизированных зависимостей: сравнение надежности различных стратегий генерации

person Khairul    schedule 09.01.2012

Вот что я нахожу:

Модифицированная реализация модели, описанной Кларком и Лапатой, 2008 г., «Глобальный вывод для сжатия предложений: подход к целочисленному линейному программированию».

Документ: https://www.jair.org/media/2433/live-2433-3731-jair.pdf

Источник: https://github.com/cnap/sentence-compression (написано на JAVA)

Исходные данные: в лагере отряды повстанцев приветствовали транспарантом с надписью «Добро пожаловать домой».

Вывод: в лагере войска приветствовали.

Обновление: последовательность за последовательностью с моделью внимания для суммирования текста.

https://github.com/tensorflow/models/tree/master/textsum

https://arxiv.org/abs/1509.00685

person mwweb    schedule 24.04.2015

Для начала попробуйте использовать библиотеки watson NaturalLanguageUnderstanding/Alchemy. С помощью которого я смог извлечь важные ключевые слова из своих утверждений, например:

Ввод: Эй! У меня проблемы с экраном моего ноутбука

Вывод: экран ноутбука выдаёт аппаратные проблемы.

не просто перефразируя, но используя NLU, вы можете получить следующие сведения о своем операторе ввода, например, для приведенного выше оператора вы можете получить сведения для следующих категорий:

Язык, такой как «en», сущности, понятия, ключевые слова, такие как «экран ноутбука», «проблемы» с такими деталями, как релевантность, текст, эмоция ключевого слова, настроение. Категории с такими деталями, как метки, оценка релевантности. Семантические роли с такими деталями, как предложение, его тема, действие и предмет

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

Ниже приведен пример кода для библиотек watson. Примечание: библиотеки waston не бесплатны, но дают пробную версию на один месяц, поэтому вы можете начать с этого, а затем, как только вы овладеете концепциями, переключитесь на другие библиотеки с открытым исходным кодом и выясните аналогичные библиотеки и функции

NaturalLanguageUnderstanding service = new NaturalLanguageUnderstanding(
    NaturalLanguageUnderstanding.VERSION_DATE_2017_02_27,
    WatsonConfiguration.getAlchemyUserName(),
    WatsonConfiguration.getAlchemyPassword());


//ConceptsOptions
ConceptsOptions conceptOptions = new ConceptsOptions.Builder()
    .limit(10)
    .build();

//CategoriesOptions
    CategoriesOptions categoriesOptions = new CategoriesOptions();

//SemanticOptions
SemanticRolesOptions semanticRoleOptions = new SemanticRolesOptions.Builder()
    .entities(true)
    .keywords(true)
    .limit(10)
    .build();

EntitiesOptions entitiesOptions = new EntitiesOptions.Builder()
    .emotion(true)
    .sentiment(true)
    .limit(10)
    .build();

KeywordsOptions keywordsOptions = new KeywordsOptions.Builder()
    .emotion(true)
    .sentiment(true)
    .limit(10)
    .build();

Features features = new Features.Builder()
    .entities(entitiesOptions)
    .keywords(keywordsOptions)
    .concepts(conceptOptions)
    .categories(categoriesOptions)
    .semanticRoles(semanticRoleOptions)
    .build();

AnalyzeOptions parameters = new AnalyzeOptions.Builder()
    .text(inputText)
    .features(features)
    .build();

AnalysisResults response = service
    .analyze(parameters)
    .execute();
System.out.println(response);
person chuha.billi    schedule 06.07.2017

Вы можете использовать комбинацию «удаления стоп-слов» и «выборки и лемматизации». Стемминг и лемматизация — это процесс, который возвращает все слова в тексте к их основному корню, вы можете найти полное объяснение здесь, я использую стеммер Porter, поищите в google. После стемминга и лемматизации удалить стоп-слова очень просто, вот мой метод удаления стоп-слов:

public static String[] stopwords ={"a", "about", "above", "across", "after", "afterwards", "again", "against", "all", "almost", 
    "alone", "along", "already", "also","although","always","am","among", "amongst", "amoungst", "amount",  "an", "and", 
    "another", "any","anyhow","anyone","anything","anyway", "anywhere", "are", "around", "as",  "at", "back","be","became", 
    "because","become","becomes", "becoming", "been", "before", "beforehand", "behind", "being", "below", "beside", "besides", 
    "between", "beyond", "bill", "both", "bottom","but", "by", "call", "can", "cannot", "cant", "co", "con", "could", "couldnt",
    "cry", "de", "describe", "detail", "do", "done", "down", "due", "during", "each", "eg", "eight", "either", "eleven","else",
    "elsewhere", "empty", "enough", "etc", "even", "ever", "every", "everyone", "everything", "everywhere", "except", "few", 
    "fifteen", "fify", "fill", "find", "fire", "first", "five", "for", "former", "formerly", "forty", "found", "four", "from", 
    "front", "full", "further", "get", "give", "go", "had", "has", "hasnt",
    "have", "he", "hence", "her", "here", "hereafter", "hereby", "herein", "hereupon", "hers", "herself", 
    "him", "himself", "his", "how", "however", "hundred", "ie", "if", "in", "inc", "indeed", "interest", "into", 
    "is", "it", "its", "itself", "keep", "last", "latter", "latterly", "least", "less", "ltd", "made", "many", 
    "may", "me", "meanwhile", "might", "mill", "mine", "more", "moreover", "most", "mostly", "move", "much", "must", 
    "my", "myself", "name", "namely", "neither", "never", "nevertheless", "next", "nine", "no", "nobody", "none", 
    "noone", "nor", "not", "nothing", "now", "nowhere", "of", "off", "often", "on", "once", "one", "only", "onto", 
    "or", "other", "others", "otherwise", "our", "ours", "ourselves", "out", "over", "own","part", "per", "perhaps",
    "please", "put", "rather", "re", "same", "see", "seem", "seemed", "seeming", "seems", "serious", "several", "she",
    "should", "show", "side", "since", "sincere", "six", "sixty", "so", "some", "somehow", "someone", "something", 
    "sometime", "sometimes", "somewhere", "still", "such", "system", "take", "ten", "than", "that", "the", "their", 
    "them", "themselves", "then", "thence", "there", "thereafter", "thereby", "therefore", "therein", "thereupon", 
    "these", "they", "thickv", "thin", "third", "this", "those", "though", "three", "through", "throughout", "thru", 
    "thus", "to", "together", "too", "top", "toward", "towards", "twelve", "twenty", "two", "un", "under", "until", 
    "up", "upon", "us", "very", "via", "was", "we", "well", "were", "what", "whatever", "when", "whence", "whenever",
    "where", "whereafter", "whereas", "whereby", "wherein", "whereupon", "wherever", "whether", "which", "while", 
    "whither", "who", "whoever", "whole", "whom", "whose", "why", "will", "with", "within", "without", "would", "yet",
    "you", "your", "yours", "yourself", "yourselves","1","2","3","4","5","6","7","8","9","10","1.","2.","3.","4.","5.","6.","11",
    "7.","8.","9.","12","13","14","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z",
    "terms","CONDITIONS","conditions","values","interested.","care","sure","!","@","#","$","%","^","&","*","(",")","{","}","[","]",":",";",",","<",">","/","?","_","-","+","=",
    "a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z",
    "contact","grounds","buyers","tried","said,","plan","value","principle.","forces","sent:","is,","was","like",
    "discussion","tmus","diffrent.","layout","area.","thanks","thankyou","hello","bye","rise","fell","fall","psqft.","http://","km","miles"};

В моем проекте я использовал абзац в качестве ввода текста:

public static String removeStopWords(String paragraph) throws IOException{
    Scanner paragraph1=new Scanner( paragraph );
    String newtext="";
    Map map = new TreeMap();
    Integer ONE = new Integer(1);
    while(paragraph1.hasNext()) {
        int flag=1;
        fixString=paragraph1.next();
        fixString=fixString.toLowerCase();
        for(int i=0;i<stopwords.length;i++) {
            if(fixString.equals(stopwords[i])) {
                flag=0;
            }
        }
        if(flag!=0) {
            newtext=newtext+fixString+" ";  
        }
            if (fixString.length() > 0) {
            Integer frequency = (Integer) map.get(fixString);
            if (frequency == null) {
                frequency = ONE;
            } else {
                int value = frequency.intValue();
                frequency = new Integer(value + 1);
            }
            map.put(fixString, frequency);                 
            }                     
    }
    return newtext;
}

Я использовал Стэнфордскую библиотеку НЛП, которую вы можете скачать с здесь. Я надеюсь, что я помог вам в чем-то.

person KhuzG    schedule 08.03.2015
comment
Ссылки мертвы на данный момент. Кроме того, удаления стоп-слов недостаточно, как прокомментировал @nflacco. В целом этот ответ следует улучшить. - person mins; 08.03.2015
comment
Я проверил ссылки, и они работают, и я знаю, что мой ответ не идеален (в НЛП нет ничего идеального), но это только начало. - person KhuzG; 10.03.2015
comment
Что вы порекомендуете мне улучшить в моем ответе? - person KhuzG; 10.03.2015
comment
Добро пожаловать на сайт. Ваш ответ является интересным вкладом и, вероятно, получит больше голосов после того, как вы исправите пару аспектов: по какой-то причине первая ссылка не работает. Как объясняется в разделе Как написать хороший ответ? рекомендуется предоставлять контекст для ссылок< /я>. Это также сбалансирует важность, придаваемую выделению корней и лемматизации, и шагу удаления стоп-слов. - person mins; 10.03.2015
comment
Вы должны определить цель и использование кода вместо публикации кода и предоставить решение таким образом, чтобы оно оставалось независимым от языка. - person Ravinder Payal; 25.07.2016
comment
Я думаю, ему нужен семантический анализ для извлечения информации, но это всего лишь предварительная обработка. - person Raymond Chen; 28.03.2017