2017-02-23 5 views
0

@(@で始まる)やハッシュタグ(#で始まる)以外のツイートの言葉を得たいと思います。@endionや#hashtagでないツイートのすべての単語を取得するためのPython正規表現

私のコードは次のようである:

import re 
pattern=r'(?u)\b\w\w+\b' 
pattern=re.compile(pattern) 
pattern.findall('this is a tweet #hashtag @mention') 

この正規表現での結果は これは

つぶやきハッシュタグの言及であるが、私はハッシュタグ言及したくないです結果はになります。 私は結果になりたい:

これは .thisの出力はつぶやきあるので、私は代わりに、\ bの空白は使用できませんつぶやき

注意です(注意してください。 も でなければなりません。 \ bは単語の開始を強制的に非英数字にしますが、\ sを使用するとはこのは検索結果に含まれません。

+1

あなたは、私がこの正規表現を与えている正規表現 –

+0

を適用した後、出力をフィルタリングし、@や#文字をあなたの言葉にオプションの接頭辞を確認し「これはつぶやきは」私のものではない別の関数(scikit-learnのtfidfvectorizer)は、私がpost/pre処理を行うことができないので、正規表現はその仕事をするべきです。 – Ash

答えて

1
(?<![#@])\b\w+\b 

これはデモを使用することができます。

https://regex101.com/r/KzHvuy/2

+0

ありがとう、これは動作しますが、単語の前の文字は英数字以外の英数字にすることができます。これはツイートです(結果の一部として返す必要があります)。@と#を除外したいものが必要です。 – Ash

+0

ええ、これは、ありがとう@vksです。 – Ash

+0

1つの質問@vks、あなたは元の投稿の正規表現の冒頭でそれ(?u)が何をしているのか分かりますか? (それはsklearnからコピーされます)。 – Ash

0

あなたはregex以外の解決策に開かれている場合は、望ましい結果のためにfilterlambda機能を利用することができます。

a = 'this is a tweet #hashtag @mention' 
" ".join(filter(lambda x:x[0]!='#' and x[0]!='@' , a.split())) 

+0

ありがとうございますが、別の関数に渡す必要があります。 – Ash

関連する問題