【问题标题】:Changing list to string to remove characters将列表更改为字符串以删除字符
【发布时间】:2020-01-22 13:38:24
【问题描述】:

我有一个文件,我正在尝试对其进行词频列表,但我在列表和字符串方面遇到了问题。我将文件更改为字符串以从文件中删除数字,但这最终会弄乱标记化。预期的输出是我正在打开的文件的字数,不包括数字,但我得到的是以下内容:

Counter({'<_io.TextIOWrapper': 1, "name='german/test/polarity/negative/neg_word_list.txt'": 1, "mode='r'": 1, "encoding='cp'>": 1})
done

代码如下:

import re
from collections import Counter

def word_freq(file_tokens):
    global count
    for word in file_tokens:
        count = Counter(file_tokens)
    return count

f = open("german/test/polarity/negative/neg_word_list.txt")

clean = re.sub(r'[0-9]', '', str(f))

file_tokens = clean.split()

print(word_freq(file_tokens))
print("done")
f.close()

【问题讨论】:

  • 您好,您可以添加输入和预期结果示例吗?
  • clean = re.sub(r'[0-9]', '', f.read())?
  • facepalm 我尝试了所有方法,但 f.read 当然有效。谢谢!
  • 为什么count 在这里是全局的,如果您只在循环内使用file_tokens 而不是word,那么for word in file_tokens: 循环的目的是什么?我认为您的功能可以简化为 def word_freq(file_tokens): return Counter(file_tokens),然后您可以通过删除它并改为调用 print(Counter(file_tokens)) 来简化它。

标签: python string list word-frequency


【解决方案1】:

这最终成功了,感谢 Rakesh

import re
from collections import Counter

def word_freq(file_tokens):
    global count
    for word in file_tokens:
        count = Counter(file_tokens)
    return count

f = open("german/test/polarity/negative/neg_word_list.txt")

clean = re.sub(r'[0-9]', '', f.read())

file_tokens = clean.split()

print(word_freq(file_tokens))
print("done")
f.close()

【讨论】:

    【解决方案2】:

    进一步阅读,我注意到您没有“读取”文件,您只是打开了它。

    如果您只打印打开文件:

    f = open("german/test/polarity/negative/neg_word_list.txt")
    print(f)
    

    您会注意到它会告诉您对象是什么,“io.TextIOWrapper”。所以你需要阅读它:

    f_path = open("german/test/polarity/negative/neg_word_list.txt")
    f = f_path.read()
    f_path.close() # don't forget to do this to clear stuff
    print(f)
    # >>> what's really inside the file
    

    或者不用“close()”的另一种方法:

    # adjust your encoding
    with open("german/test/polarity/negative/neg_word_list.txt", encoding="utf-8") as r:
        f = r.read()
    

    这样做可能不会在列表中,而是在纯文本文件中,因此您可以迭代每一行:

    list_of_lines = []
    # adjust your encoding
    with open("german/test/polarity/negative/neg_word_list.txt", encoding="utf-8") as r:
        # read each line and append to list
        for line in r:
            list_of_lines.append(line)
    

    【讨论】:

      猜你喜欢
      • 2015-10-24
      • 2010-12-18
      • 2015-10-28
      • 2012-05-24
      • 2019-12-09
      • 1970-01-01
      • 2011-11-01
      • 2012-04-18
      • 1970-01-01
      相关资源
      最近更新 更多