2016-09-29 12 views
1

私は次のコードを入力すると:それは、これらの3つのトークンに分割されます tokens = word_tokenize("[email protected]")電子メールを3つの異なるトークンに分割しないようにnltkパッケージを更新するにはどうすればよいですか?

を:「A」「@」、「b.com」

私が何をしたいのか、としてそれを維持することです単一のトークン「[email protected]」。

+0

タグの選択肢が示唆するように、可能な解決策は、 'RegexpTokenizer'を使用して、トークンとみなされるべきものを定義することです。これは、パッケージを更新することとは関係ありません。 – lenz

答えて

1

免責事項:そこにはたくさんの電子メールの正規表現があります。私はこの質問のすべての電子メールフォーマットに一致させようとしているわけではなく、単にの例を示しています。

RegexpTokenizerlenzによってmentioned above)との正規表現のアプローチは、動作することができます:

from nltk.tokenize.regexp import RegexpTokenizer 
line="My email: [email protected] is not accessible." 
pattern = r'\[email protected][^\s.]+\.[a-zA-Z]+|\w+|[^\w\s]' 
tokeniser=RegexpTokenizer(pattern) 
tokeniser.tokenize(line) 
# => ['My', 'email', ':', '[email protected]', 'is', 'not', 'accessible', '.'] 

正規表現のマッチ:

  • \[email protected][^\s.]+\.[a-zA-Z]+ - テキストは、電子メールのように見える:
    • \S+から1かをより多くの非空白文字
    • @から@シンボル
    • [^\s.]+ - 空白以外の1以上の文字と.
    • \. - リテラルドット
    • [a-zA-Z]+から1以上のASCII文字
  • |
  • - 又は
  • \w+ - 1つ以上の単語の文字(英字、数字、またはアンダースコア)
  • | - または
  • [^\w\s] - 単語と空白文字以外の文字が1つ以上(1つ以上のシーケンスに一致すると、その後ろに+を追加します)の出現。

online regex demoを参照してください。

関連する問題