2015-03-15 6 views
2

Я использую стенд ford core NLP. попробовали следующий пример. этот пример может символизировать слова из текста. Однако он также извлекает пунктуацию, такую ​​как запятая, полная остановка и т. Д. Мне было интересно, как установить свойства, которые позволяют не извлекать знаки препинания, или, наоборот, есть ли другой способ сделать то же самое. Вот пример кода. Я знаю, что он легко использует Python, но не уверен, как это сделать на Java. Пожалуйста, предложите.избегать пунктуации в Стэнфордском НЛП

props = new Properties(); 
    props.setProperty("annotators", "tokenize, ssplit"); 
    pipeline = new StanfordCoreNLP(props); 
    String text = "this is simple text written in English,Spanish etc." 

// create an empty Annotation just with the given text 
    Annotation document = new Annotation(text); 

    pipeline.annotate(document); 

    List<CoreMap> sentences = document.get(SentencesAnnotation.class); 

    for(CoreMap sentence: sentences) { 
    for (CoreLabel token: sentence.get(TokensAnnotation.class)) { 
    // this is the text of the token 
    String word = token.get(TextAnnotation.class); 
     } 
    } 

ответ

1

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

Вы можете совместить маркеры, которые являются пунктуацией, используя регулярное выражение. (Используйте \p{Punct}, см., Например, Punctuation Regex in Java). Затем просто снимите токены, текстовое содержимое которых соответствует такому регулярному выражению.

+0

спасибо, А как насчет слов остановки, как отбросить слова остановки, они также недоступны в качестве опций? – Nhqazi

+0

Они недоступны в качестве стандартной функции, поскольку определение стоп-слова не очень конкретное/оно зависит от конкретной задачи. Вы можете создать свой собственный список дневников или найти его в Интернете и вручную отфильтровать токены с точками доступа так же, как и маркеры пунктуации. –