Advertisement

python实现英文短文自动分词写入文本文件

阅读量:

欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~

目录

一.前言

二.代码

三.使用

四.分析


一.前言

英语文献自动分词(Automatic Word Segmentation)被广泛应用于自然语言处理和文本分析领域,并得到了较为广泛的运用。

二.代码

复制代码
 import string

    
 f = open('./data/split.txt')
    
 s=f.read()
    
 str1=s.title()
    
 print(str1)
    
 print("".join([s for s in str1.splitlines(True) if s.strip()]))
    
 list1 = str1.split() # 采用默认分隔符进行分割
    
 #字符串列表去重
    
 l1=list(set(list1))
    
 l1.sort(key=list1.index)
    
 for i in l1:
    
   #去掉特殊符号
    
   i1=i.translate(str.maketrans('', '', string.punctuation))
    
   i2=i1.strip(' \t\n\r')# 去除字符串中头尾的空格
    
   #print(i1.strip(' \t\n\r')) # 去除字符串中头尾的空格
    
   if not i2.isnumeric():   #滤除数字
    
     i3=i2
    
     f1 = open('./data/split副本.txt','a')
    
     f1.write('\n'+i3)
    
    
    
    
    代码解读

三.使用

在data文件夹下写入split.txt文件:

幸运的是,在我的青少年时期就发现了我对工作的热爱,并把它当成了一生的目标去追求。
沃兹尼亚克和我在父亲的车库里创立了苹果公司时年仅20岁。
我们付出了艰辛的努力,在10年间我们的公司从两位初创者在车库中的小团队成长为拥有上千万员工的全球巨擘。
就在我们推出备受瞩目的Mac系列计算机一年前(那时我也迎来了自己的30岁生日),我们还共同设计并推出了改变历史的产品——Apple Macintosh。
然而好景不长,“Mac Plus”计划失败后我们逐渐走上了不同的道路。
随后我又陷入了困境。
你为什么会离开你创立的公司?
事实上,在加入苹果仅仅两年后我就被解雇了,
而且是公开宣布的结果,
这让我感到非常震惊和失望,
因为当时我认为自己已经找到了人生正确的方向并为之奋斗终身的目标——那就是创建一个改变世界的产品。

四.分析

这段代码主要执行了以下步骤:

  1. 读取文件
    • 使用 open 函数获取文件指针并打开名为 split.txt 的文本文件。
  2. 转换为标题格式
    • 将字符串 s 按单词首字母大写并其余字母小写的规则应用 title() 方法。
  3. 打印转换后的标题格式文本
    • 输出 str1 变量的内容。
  4. 打印非空行
    • 使用列表推导式结合 splitlines(True)strip() 方法筛选出非空行并将其连接起来输出。
  5. 分割字符串并去重
    • 将处理后的字符串按空格分割生成单词列表并将重复项去除。
  6. 排序并处理每个单词
    • 对去除重复项后的单词列表分别进行排序并对每个单词执行以下操作:
      • 使用 translate() 方法去除标点符号。
      • 去除两端空白字符。
      • 检查是否为纯数字后决定是否追加到结果文件中并在前面添加换行符。

潜在问题及改进建议

  • 打印时需排除所有仅由空格、制表符或回车符构成的空白行。
  • 若需保留原有单词出现顺序,则不可采用先set去重再按原始列表排序的方法。
  • 为确保文件安全,在使用后及时关闭其位置。
  • 处理完每个单词决定写入文件前,在临时列表中进行存储;待全部完成后才一次性执行存入操作。

修改后的部分代码可能如下所示:

复制代码

python复制代码

import string
# 使用 with 语句自动管理文件的打开和关闭,并指定编码方式
with open('./data/split.txt', 'r', encoding='utf-8') as f:
s = f.read()
# ...(省略中间代码)...
# 使用列表推导式去除所有空白行(包括只包含空格、制表符或换行符的行)
print("".join([line for line in str1.splitlines(True) if line.strip(' \t\n\r')]))
# ...(省略中间代码)...
# 使用有序字典或其他方法去重并保持顺序(如果需要)
from collections import OrderedDict
words = str1.split()
unique_words = list(OrderedDict.fromkeys(words))
# ...(省略中间代码)...
# 一次性写入文件(如果数据量不大)或按需实时写入(如果数据量大)
output_lines = [] # 存储待写入的行
for i in unique_words:
# ...(省略处理代码)...
if not i2.isnumeric():
output_lines.append(i3) # 添加到待写入列表而不是直接写入文件
# 一次性写入所有行到文件(如果数据量不大)
with open('./data/split副本.txt', 'a', encoding='utf-8') as f1:
f1.write('\n'.join(output_lines) + '\n') # 写入所有行并添加换行符分隔

您好!感谢您抽出宝贵时间浏览我的博客文章,在此表示衷心的谢意!希望能为您提供一些启发与帮助。我们真诚地期待您的反馈与交流意见,在此再次衷心感谢!

全部评论 (0)

还没有任何评论哟~