我目前正在编写一个 Python 脚本,该脚本获取日志文件列表(来自搜索引擎)并生成一个包含其中所有查询的文件,以供以后分析。该脚本的另一个特点是它删除了最常用的单词,我也实现了这一点,但我遇到了一个我似乎无法克服的问题。只要查询不包含特殊字符,单词的删除就会按预期工作。由于搜索日志使用丹麦语,因此字符 æ、ø 和 å 将定期出现。
搜索主题我现在知道我需要将这些编码为 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 环境中运行 Python 2.7.2。该脚本应该能够在其他平台(即 Linux 和 Mac OS)上运行。
如果你们中的一个人能够帮助我,我将不胜感激。
最好的问候卡斯帕