Подтвердить что ты не робот

Сжатие предложения с использованием NLP

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

Модифицированная реализация модели, описанной в Clarke и Lapata, 2008, "Глобальный вывод для сжатия предложений: целое число Подход линейного программирования ".

Бумага: https://www.jair.org/media/2433/live-2433-3731-jair.pdf

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

Ввод: В лагере повстанческие войска были встречены баннером, который читал "Добро пожаловать домой".

Результат: В лагере войска приветствовали.

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

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

https://arxiv.org/abs/1509.00685

Ответ 3

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

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

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

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

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

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

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

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);

Ответ 4

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

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;
}

Я использовал библиотеку Stanford NLP, которую вы можете скачать, если из здесь. Надеюсь, что я кое-что вам помог.