2015-11-03 3 views
0

Я искал решение для извлечения адресов электронной почты, номеров телефонов ... из текста с использованием Stanford CoreNLP (RegexNERAnnotator). Может ли кто-нибудь указать любой пример?Извлечение адресов электронной почты, телефонных номеров с помощью Stanford CoreNLP

UPDATE: 04/11/2015: На самом деле я должен вместо этого спросил, есть ли способ Stanford RegexNERAnnotator может поддерживает регулярные выражения Java.

Пример:

 final String EMAIL_PATTERN = 
      "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@" 
      + "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$"; 

     List<CoreLabel> tokens = ...; 
     TokenSequencePattern pattern = TokenSequencePattern.compile(EMAIL_PATTERN); 
     TokenSequenceMatcher matcher = pattern.getMatcher(tokens); 

     while (matcher.find()) { 
     String matchedString = matcher.group(); 
     List<CoreMap> matchedTokens = matcher.groupNodes(); 
     ... 
     } 

Кажется, что он не поддерживает Регулярное выражение Java:

Exception in thread "main" edu.stanford.nlp.ling.tokensregex.parser.TokenMgrError: Lexical error at line 1, column 1. Encountered: "^" (94), after : "" 
    at edu.stanford.nlp.ling.tokensregex.parser.TokenSequenceParserTokenManager.getNextToken(TokenSequenceParserTokenManager.java:1029) 
    at edu.stanford.nlp.ling.tokensregex.parser.TokenSequenceParser.jj_ntk(TokenSequenceParser.java:3228) 
    at edu.stanford.nlp.ling.tokensregex.parser.TokenSequenceParser.SeqRegexBasic(TokenSequenceParser.java:784) 
    at edu.stanford.nlp.ling.tokensregex.parser.TokenSequenceParser.SeqRegexDisjConj(TokenSequenceParser.java:973) 
    at edu.stanford.nlp.ling.tokensregex.parser.TokenSequenceParser.SeqRegex(TokenSequenceParser.java:743) 
    at edu.stanford.nlp.ling.tokensregex.parser.TokenSequenceParser.SeqRegexWithAction(TokenSequenceParser.java:1596) 
    at edu.stanford.nlp.ling.tokensregex.parser.TokenSequenceParser.parseSequenceWithAction(TokenSequenceParser.java:37) 
    at edu.stanford.nlp.ling.tokensregex.TokenSequencePattern.compile(TokenSequencePattern.java:186) 
    at edu.stanford.nlp.ling.tokensregex.TokenSequencePattern.compile(TokenSequencePattern.java:169) 

ответ

5

StackOverflow это не место для руководства, или даже примеров. Но, похоже, регулярное регулярное выражение должно работать, даже не требуя RegexNER. С небольшим количеством Googling, см. Using a regular expression to validate an email address для электронных писем. Номера телефонов должны быть столь же легко, как после длительного, но простой регулярное выражение:

(\+[0-9]{1,2}(\s*|-)?)?(\(?[0-9]{3}\)?)?(\s*|-)[0-9]{3}(\s*|-)[0-9]{4} 

Я думаю, что из лексического анализа Стэнфордского Tokenizer бы сделать это труднее, а не легче.

+0

Ответ, который вы связываете, говорит, что вы не можете использовать регулярные выражения для электронной почты. – Reactormonk

+2

Действительно - но это также означает, что вы, вероятно, не хотите использовать TokensRegex для этих случаев. Если вам абсолютно необходимо зафиксировать все допустимые адреса электронной почты, вы застряли в реализации полной спецификации. В противном случае регулярное выражение, скорее всего, поймает 99,9% случаев, которые вы видите. –

+0

Спасибо. Похоже, что использование Java Regular Expression, в моем случае, для извлечения электронных писем и телефонных номеров будет проще, чем использование Stanford RegexNERAnnotator. –

Смежные вопросы