2

機械学習形式用に変更する必要がある 1 行あたりのツイートを含むテキスト ファイルがあります。Python と基本的な UNIX テキスト操作 (正規表現) を使用して、多くの文字列操作を行っています。また、sed、grep、pythons .re 関数のコツをつかんでいます....しかし、この次の問題は私にとってマインドブロワーであり、誰でもこれで私を助けることができます。私はいくつかのグーグル検索を試みましたが、運がありません:(

私は常に疑似コードから始めて簡単にしますが、これが私が望むものです... " -token1- または -token2- または -token3- または -token4- を整数「1」に置き換え、他のすべての単語/トークンを置き換えます整数「0」で

「1」になる必要がある単語/トークンのリストは次のとおりです。

  • :)
  • いいね
  • ハッピー
  • 楽しい

私のつぶやきは次のようになります。

  • 今日は楽しい一日でした:)
  • 私はパイソンがかっこいいと思います!それは私を幸せにします

新しいプログラム/関数の出力は次のようになります。

  • 0 0 0 0 1 0 1
  • 0 0 0 1 0 0 0 1

注 1: 「クール」に「!」が含まれていることに注意してください。その後ろに、それも含める必要がありますが、簡単にするために、最初にファイル内のすべての句読点をいつでも削除できます

注2:すべてのツイートは小文字になります。すべての行を小文字に変更する関数が既にあります

UNIX正規表現(sed、grep、awkなど)を使用してこれを行う方法、またはPythonで行う方法を知っている人はいますか? ところで、これは宿題ではありません。感情分析プログラムに取り組んでおり、少し実験しています。

ありがとう!:)

4

3 に答える 3

8
from string import punctuation as pnc
tokens = {':)', 'cool', 'happy', 'fun'}
tweets = ['this has been a fun day :)', 'i find python cool! it makes me happy']
for tweet in tweets:
    s = [(word in tokens or word.strip(pnc) in tokens) for word in tweet.split()]
    print(' '.join('1' if t else '0' for t in s))

出力:

0 0 0 0 1 0 1
0 0 0 1 0 0 0 1

@EOLで提案されているようorに、4 行目の は を処理するためにあります。:)

など、正しく処理されないケースがまだありますcool :), I like it。問題は要件に固有のものです。

于 2013-05-26T02:10:56.667 に答える
1

awk

awk '
NR==FNR {
    a[$1];
    next
    }

{ 
    gsub(/!/, "", $0)  # This will ignore `!`. Other rules can be added.
    for (i=1;i<=NF;i++) {
        if ($i in a) {
        printf "1 "
        }
    else {
        printf "0 "
        }
    }
    print ""
}' lookup tweets

gsubテスト: (おそらく、特殊なケースを処理するために行を変更する必要があります。)

[jaypal:~/Temp] cat lookup
:)
cool
happy
fun

[jaypal:~/Temp] cat tweets
this has been a fun day :)
i find python cool! it makes me happy

[jaypal:~/Temp] awk '
NR==FNR {
    a[$1];
    next
    }

{ 
    gsub(/!/, "", $0)
    for (i=1;i<=NF;i++) {
        if ($i in a) {
        printf "1 "
        }
    else {
        printf "0 "
        }
    }
    print ""
}' lookup tweets
0 0 0 0 1 0 1
0 0 0 1 0 0 0 1
于 2013-05-26T03:27:14.370 に答える
0

これがすべての正規表現として必要な場合は、ここで私のソリューションを見てください。 テキストの行をバイナリ型パターンに変更する

于 2013-05-29T03:41:16.413 に答える