Я искал решение для извлечения адресов электронной почты, номеров телефонов ... из текста с использованием 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)
Ответ, который вы связываете, говорит, что вы не можете использовать регулярные выражения для электронной почты. – Reactormonk
Действительно - но это также означает, что вы, вероятно, не хотите использовать TokensRegex для этих случаев. Если вам абсолютно необходимо зафиксировать все допустимые адреса электронной почты, вы застряли в реализации полной спецификации. В противном случае регулярное выражение, скорее всего, поймает 99,9% случаев, которые вы видите. –
Спасибо. Похоже, что использование Java Regular Expression, в моем случае, для извлечения электронных писем и телефонных номеров будет проще, чем использование Stanford RegexNERAnnotator. –