関数単語の頻度を計算します
-
26-10-2019 - |
質問
の頻度を計算したいと思います 関数単語 python/nltkで。私はそれをするための2つの方法を見ます:
- スピーチの一部のタガーを使用して、単語を機能させるために構成されるPOSタグにまとめます
- 関数単語のリストを作成し、簡単な検索を実行します
最初のケースでのキャッチは、私のデータがうるさいことであり、どのPOタグが関数単語として構成されるか(確かに)わからないことです。 2番目のケースでのキャッチは、リストがないことであり、データがうるさいので、ルックアップは正確ではありません。
より正確な結果を投げかける最初の例または他の例を好むでしょう。
解決
私はただ使用しました liwc 英語2007辞書(私は同じものを支払いました)、今のように簡単な検索を行いました。他の答えは大歓迎です。
ここでいくつかの答えの衝動性に少し驚いていると言わなければなりません。それ以来、誰かがコードを求めました。これが私がしたことです:
''' Returns frequency of function words '''
def get_func_word_freq(words,funct_words):
fdist = nltk.FreqDist([funct_word for funct_word in funct_words if funct_word in words])
funct_freq = {}
for key,value in fdist.iteritems():
funct_freq[key] = value
return funct_freq
''' Read LIWC 2007 English dictionary and extract function words '''
def load_liwc_funct():
funct_words = set()
data_file = open(liwc_dict_file, 'rb')
lines = data_file.readlines()
for line in lines:
row = line.rstrip().split("\t")
if '1' in row:
if row[0][-1:] == '*' :
funct_words.add(row[0][:-1])
else :
funct_words.add(row[0])
return list(funct_words)
Pythonでコードを行った人は誰でも、特定のPOSタグで検索または単語を抽出することを実行するか抽出することはロケットサイエンスではないことを教えてくれます。追加するには、NLP(自然言語処理)とNLTK(自然言語ツールキット)のタグ(質問)は、鋭い心に十分な兆候を示す必要があります。
とにかく、私はここで返信する人々の感情を理解し、尊重します。なぜなら、そのほとんどは無料であるため、私たちにできることは、質問ポスターに対して少し敬意を示すことだと思います。あなたが他の人を助けるとき、それが正しく指摘されているように、助けが受け取られるのは正しく指摘されています。
他のヒント
試してみるまで、どのアプローチが機能するかわかりません。ただし、最初のアプローチをお勧めします。私は非常にうるさいデータで成功してそれを使用しました。ここでは、電子メールのサブジェクトヘッダー(適切な文ではなく短いテキスト)と言語が不明でした(約85%英語、Cavnar&Trenkleアルゴリズムがすぐに壊れた)という「文」では、それを使用しました。 。 成功 検索エンジンでの検索パフォーマンスの向上として定義されました。周波数を数えたい場合は、問題が簡単になる場合があります。
コンテキストを考慮したPOSタガーを使用していることを確認してください(ほとんどの場合)。取得した単語と頻度のリストを検査し、関数単語を考慮していない単語を排除したり、長すぎる単語を除外したりすることもあります。これにより、誤検知が排除されます。
(免責事項:NLTKではなくStanford POS Taggerを使用していたので、YMMV。ペンツリーバンクで英語のデフォルトモデルの1つを使用しました。)