Получение оригинального текста после использования stanford NLP parser

Привет люди из интернета,

У нас возникает следующая проблема с Stanford NLP API: у нас есть строка, которую мы хотим преобразовать в список предложений. Во-первых, мы использовали String sentenceString = Sentence.listToString(sentence); но listToString не возвращает исходный текст из-за токенизации. Теперь мы попытались использовать listToOriginalTextString следующим образом:

private static List<String> getSentences(String text) {
        Reader reader = new StringReader(text);
        DocumentPreprocessor dp = new DocumentPreprocessor(reader);
        List<String> sentenceList = new ArrayList<String>();

        for (List<HasWord> sentence : dp) {
            String sentenceString = Sentence.listToOriginalTextString(sentence);
            sentenceList.add(sentenceString.toString());
        }

        return sentenceList;
    }

Это не работает. По-видимому, мы должны установить атрибут "обратимый" в true, но мы не знаем, как это сделать. Как мы можем это сделать?

В общем, как вы правильно используете listToOriginalTextString? Какие препараты вам нужны?

С уважением, Хайет

2 ответа

String sentenceStr = sentence.get(CoreAnnotations.TextAnnotation.class)

Это дает вам оригинальный текст. Пример для файла JSONOutputter.java:

l2.set("id", sentence.get(CoreAnnotations.SentenceIDAnnotation.class));
l2.set("index", sentence.get(CoreAnnotations.SentenceIndexAnnotation.class));
l2.set("sentenceOriginal",sentence.get(CoreAnnotations.TextAnnotation.class));
l2.set("line", sentence.get(CoreAnnotations.LineNumberAnnotation.class));

Если я правильно понимаю, вы хотите получить соответствие токенов исходному входному тексту после токенизации. Вы можете сделать это так;

        //split via PTBTokenizer (PTBLexer)
        List<CoreLabel> tokens = PTBTokenizer.coreLabelFactory().getTokenizer(new StringReader(text)).tokenize();

        //do the processing using stanford sentence splitter (WordToSentenceProcessor)
        WordToSentenceProcessor processor = new WordToSentenceProcessor();
        List<List<CoreLabel>> splitSentences = processor.process(tokens);

        //for each sentence
        for (List<CoreLabel> s : splitSentences) {                

            //for each word
            for (CoreLabel token : s) {
                //here you can get the token value and position like;
                //token.value(), token.beginPosition(), token.endPosition()
            }    

        }
Другие вопросы по тегам