私は現在、(検索エンジンから)ログファイルのリストを取得し、後で分析するために、これらの中にすべてのクエリを含むファイルを生成するPythonスクリプトに取り組んでいます。スクリプトのもう1つの機能は、私も実装した最も一般的な単語を削除することですが、克服できないと思われる問題に直面しました。クエリに特殊文字が含まれていない限り、単語の削除は意図したとおりに機能します。検索ログはデンマーク語であるため、文字æ、ø、åが定期的に表示されます。
トピックを検索すると、これらをUTF-8にエンコードする必要があることがわかりました。これは、クエリを取得するときに実行しています。
tmp = t_query.encode("UTF-8").lower().split()
t_queryはクエリであり、後で各単語を禁止されている単語のリストと比較するために分割します。エンコーディングを使用しない場合、エラーが発生します。
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 1: ordinal not in range(128)
編集:代わりにデコードを使用しようとしましたが、次のエラーが発生します:
UnicodeEncodeError: 'ascii' codec can't encode character u'\xa7' in position 3: ordinal not in range(128)
私はこのような言葉をループします:
for i in tmp:
if i in words_to_filter:
tmp.remove(i)
前述のように、これは特殊文字を含まない単語に対して完全に機能します。現在禁止されている単語と一緒にiを印刷しようとしましたが、次のようになります。
færdelsloven - færdelsloven
ここで、最初の単語はtmpのi番目の要素です。禁じられた言葉の最後の言葉。明らかに何かがうまくいかなかったが、私は解決策を見つけることができなかった。私はグーグルとここで見つけた多くの提案を試しましたが、今のところ何もうまくいきませんでした。
編集2:違いが生じる場合は、コーデックを使用する場合と使用しない場合の両方でログファイルをロードしてみました。
with codecs.open(file_name, "r", "utf-8") as f_src:
jlogs = map(json.loads, f_src.readlines())
重要な場合は、Windows環境からPython2.7.2を実行しています。スクリプトは、他のプラットフォーム(つまり、LinuxおよびMac OS)で実行できる必要があります。
誰かが私を助けてくれたら本当にありがたいです。
よろしくキャスパー