【问题标题】:why it only get a part of text when using split in Python为什么在 Python 中使用 split 时只得到一部分文本
【发布时间】:2022-07-06 02:56:33
【问题描述】:

我编写了一些代码来读取一个长文本文件。 txt 文件中有 10000 个英文单词。然后我想使用 split() 来获取所有单词来训练它们,代码是这样的:

with open('/train.txt', 'r') as fin
   text=fin.read()
len(text)#result is 10000
len(text.split() #result is 2800

使用 split() 时只能得到 2800 字的文本,但我认为应该是整个文本,并且 len() 的两个结果应该是相同的 10000。 为什么?由于我的电脑有限?还是我的文字有问题?

【问题讨论】:

  • len 为您提供文件中 字符 的数量,因为 read 将整个内容作为单个字符串返回。
  • 为什么你认为长度应该一样? len(text) 统计字符,len(text.split()) 统计单词。
  • 您应该查看texttest.split() 的结果,而不仅仅是它们的长度。
  • 要清楚,您的文件只有 2800 个(显然很短)字,而不是 10,000 个。正如其他人所指出的,len(text) 不知道单词边界(这是一个令人惊讶的难以处理的概念,而且涉及的变量太多,str 无法报告它)。
  • 不过,这些数字看起来确实很奇怪。这个结果意味着平均单词长度小于 3 个字符。

标签: python


【解决方案1】:

len(text) 是文件“train.txt”中的字符总数(假设为 ASCII 文本,这将与您的文件大小相同)。

len(text.split(...) 是文件中的标记总数(由您的分隔符确定)。

旁注:假设您的分隔符是 \n,您可以在 unix 上使用 cat train.txt | wc -l 进行交叉验证。

【讨论】:

  • 你也可以只使用wc -w train.txt,那么你不需要假设分隔符。
  • 小问题:len(text) 是从train.txt 解码的字符 的数量。根据它们的语言环境默认编码和所涉及的字符,实际文件大小可能会大得多(例如,如果文件是 UTF-16,则文件大小(以字节为单位)将是报告的字符数的 2-4 倍)。
  • @ShadowRanger 好点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-24
  • 2021-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-14
  • 2022-12-14
相关资源
最近更新 更多