【20200904】

可以先split/,做好特殊字符标记,存储到临时变量里面,比如,元组,数组,或者字典之类的;再遍历上面的变量,拆分括号,用一个特殊标记,标记括号里面的内容,总之找到区分括号和非括号内容就可以,之后存储到变量;最后遍历第二个变量,生成句型

【20200905】

抱歉最近精神状态不太好,又比较忙,今天大概写了下,应该没有啥问题,还有就是生成循序的问题,这个我有时间再看下,如果要改的话大概是bottom_fuc函数,和调用它的那里的逻辑。还有一种方式就是对每个句型生成一个列表,最后直接joint,但是我觉得这样会占更大的缓存空间,所以没有用。代码直接贴上来

import logging

import re

f = open("./phasesplit")

line_true = f.readline()

list_all = []

list_size = 0

i = 0

# 将两个参数进行排列组合连接

# inner_list:待添加的字符串列表

# org_str_list:已经连接的字符串列表

def bottom_fuc(inner_list = list, org_str_list = list):

inner_new_str_list = list()

for s in inner_list:

st = str(s)

for s1 in org_str_list:

st1 = str(s1)

inner_new_str_list.append(st1 + " " + st)

return inner_new_str_list

#主循环

while line_true:

# 保存分号后的内容

semi_str = ""

# 分号前面的内容

line = ""

# 可以判断分号个数,这里不进行判断

if line_true.find(";") > 0:

# 赋值

line, semi_str = line_true.split(";")

semi_str = str(semi_str).strip()

line = str(line).strip()

else:

line = line_true

list_for_loop = re.split("(\(.+?\))", line)

list_for_loop_new = []

# 继续进行数据置换

for ind, lp in enumerate(list_for_loop, 0):

tmp_lp = lp

# 存在空格且没有括号

if tmp_lp.find("(") + tmp_lp.find(")") < 0 and tmp_lp.find(" "):

# 进行置换

for data in tmp_lp.split(" "):

list_for_loop_new.append(data)

else:

list_for_loop_new.append(lp)

list_str = []

# 将数据进行进一步拆分

for ind, s in enumerate(list_for_loop_new, 0):

str_tmp = s

pare_flg = 0

# 去除括号,添加空格

if str_tmp.find("(")+str_tmp.find(")") >= 0:

str_tmp = str_tmp.strip(r"(").strip(r")")

str_tmp = " /"+ str_tmp

pare_flg = 1

# 按/拆分

if str_tmp.find("/") >= 0:

if pare_flg == 1:

pare_str = str_tmp.split("/")

list_str.append(pare_str)

else:

list_str.append(str_tmp.split("/"))

else:

list_str.append(str_tmp)

pare_flg = 0

new_str_list = []

# 组装拆分后的数据

for l_str in list_str:

if isinstance(l_str, str):

if len(new_str_list) == 0:

new_str_list.append(l_str)

else:

for ind, ns in enumerate(new_str_list, 0):

new_str_list[ind] = new_str_list[ind] + " " +l_str

elif isinstance(l_str, list):

if len(new_str_list) == 0:

new_str_list.append("")

new_str_list = bottom_fuc(l_str, new_str_list)

else:

logging.error("错误类型: ", type(l_str), l_str)

exit(-1)

# 格式处理

for ind, ns in enumerate(new_str_list, 0):

ns.rstrip("\r\n")

if len(semi_str) > 0:

new_str_list[ind] = re.sub(" {2,}", " ", new_str_list[ind].strip()) + ";" + semi_str

else:

new_str_list[ind] = re.sub(" {2,}", " ", new_str_list[ind].strip())

if len(semi_str) > 0:

new_str_list.insert(0, line + ";" + semi_str)

else:

new_str_list.insert(0, line.rstrip("\r\n"))

i += 1

# 读取下一行

line_true = f.readline()

# 添加到总列表

list_all.append(new_str_list)

list_size = i

f.close()

# 写文件

with open("result.txt", "w") as nf:

nf.write("#############################################\r")

nf.write("#section:{}\r".format(list_size))

nf.write("#############################################\r")

for la in list_all:

for nl in la:

nf.write(nl+"\r")

nf.write("\r")

nf.write("#############################################\r")

nf.close()

输入文件(phasesplit)

quarrel (with sb) about/for/over ; 2313

dabble at/in/with

(sb/sth) damn and blast (sb/sth)

dance on/upon a rope/nothing

dance on (the) air

dead/flat/stark calm

do/go/make the/one's round

do (sb/sth) grace

输出文件(result.txt)

#############################################

#section:8

#############################################

quarrel (with sb) about/for/over;2313

quarrel about;2313

quarrel with sb about;2313

quarrel for;2313

quarrel with sb for;2313

quarrel over;2313

quarrel with sb over;2313

#############################################

dabble at/in/with

dabble at

dabble in

dabble with

#############################################

(sb/sth) damn and blast (sb/sth)

damn and blast

sb damn and blast

sth damn and blast

damn and blast sb

sb damn and blast sb

sth damn and blast sb

damn and blast sth

sb damn and blast sth

sth damn and blast sth

#############################################

dance on/upon a rope/nothing

dance on a rope

dance upon a rope

dance on a nothing

dance upon a nothing

#############################################

dance on (the) air

dance on air

dance on the air

#############################################

dead/flat/stark calm

dead calm

flat calm

stark calm

#############################################

do/go/make the/one's round

do the round

go the round

make the round

do one's round

go one's round

make one's round

#############################################

do (sb/sth) grace

do grace

do sb grace

do sth grace

#############################################

python合理拆分类别_如何用Python进行词组拆分?相关推荐

  1. python 矩阵运算 for循环_如何用 Python 科学计算中的矩阵替代循环

    展开全部 因为在Mathematica中使用循环确实是低效的.32313133353236313431303231363533e78988e69d8331333361313961..... 深层次的原 ...

  2. python搭建自动化测试平台_如何用python语言搭建自动化测试环境

    原标题:如何用python语言搭建自动化测试环境 技术分享:基于Python语言的Web自动化测试环境搭建 近期发现很多初学者在学习自动化的过程当中,在环境安装环节总是出现问题,所以详细的出一篇环境搭 ...

  3. 如何制作python检查小软件_如何用Python制作整蛊小程序

    原标题:如何用Python制作整蛊小程序 下面的整蛊程序,千万不要发代码,否则就实现不了你整蛊的目的了.完成后一定要打包成一个exe程序,再发给朋友使用 . 1. 使用 pip install pyi ...

  4. python rest api 测试_如何用Python编写REST API的单元测试

    在过去的几个月中,正在从事一个名为B的项目.它是带有简单Web UI的徽章生成器,用于添加数据并生成PDF可打印徽章.B后端现在已转移到REST-API并测试REST-API中使用的功能,我们需要一些 ...

  5. python的out模式_如何用python中的DataFrame列的模式替换NA值?

    我对Python(和本网站)完全陌生,目前正试图用它们的模式替换特定数据帧列中的NA值.我试过了各种不起作用的方法.请帮我看看我做错了什么:如何用python中的DataFrame列的模式替换NA值? ...

  6. 用python做一张图片_如何用python下载一张图片

    如何用python下载一张图片 这里要用到的主要工具是requests这个工具,需要先安装这个库才能使用,该库衍生自urllib这个库,但是要比它更好用.多数人在做爬虫的时候选择它,是个不错的选择. ...

  7. 用python处理excel表格_如何用python处理excel数据 | 用python处理excel表格数据类型

    python 读取EXCEL文件中的数据格式 扩展库 xlrd 读excle xlwt 写excle 直上搜就能下载 下载后使用 import xlrd 就可以读excle了 打开文件: xls = ...

  8. python turtle画动物_如何用python画简单的动物

    首先来看一下实现效果,如下图:程序猿的生活:Python入门到精通资料大汇总,不啰嗦,全是珍藏资料!​zhuanlan.zhihu.com 具体实现代码请看: # -*- coding:utf-8 - ...

  9. 用python画机器猫代码_如何用Python画一只机器猫?| 原力计划

    原标题:如何用Python画一只机器猫?| 原力计划 作者 | 人邮异步社区 责编 | 胡巍巍 出品 | CSDN博客 自信心是成功的源泉,对刚入门编程行业的初级程序员来说,多敲代码多做项目就是构建自 ...

最新文章

  1. 广东java工资一般多少_广东java工资待遇,广东java工资一般多少,广东java工资底薪最低多少...
  2. 阅读Book: MultiObjective using Evolutionary Algorithms (2) -- Multi-Objective Optimization: 各种解释多目标
  3. 10kv电压互感器型号_10kv电流互感器的一次电流选择应遵循的基本原则
  4. 互联网晚报 | 3月1日 星期二 |​ 2022年苹果可能推出三款Apple Watch;“国家中小学智慧教育平台”投入试运行...
  5. C++对输入流输出流运算符的重载【案例】
  6. EL表达式取Map,List值的总结
  7. 使用nssm注册 windows服务
  8. mt7620a上wifi中继的实现
  9. 数值分析思考题(钟尔杰版)参考解答——第一章
  10. x265 编码一行,以及vbv上溢/下溢之后的处理
  11. c语言中lu是什么数据类型,C语言编程入门之--第四章C语言基本数据类型
  12. android 拼音过滤、匹配首字母
  13. 算法设计与分析——Johnson Trotter算法
  14. LCT学习笔记/基本思路
  15. python打包成exe,太大了该怎么解决?
  16. java文件大小格式化
  17. python 中文显示乱码如何处理
  18. Windows 10 设置不用Microsoft账户登录,将Administrator与Microsoft账户解绑,注销Microsoft账户
  19. 申请注册@MSN.COM邮箱!
  20. 河南分销系统开发|服装行业如何做引流裂变?

热门文章

  1. OpenCASCADE:写STEP
  2. boost::math::catmull_rom用法的测试程序
  3. boost::geometry::strategy::distance::pythagoras用法的测试程序
  4. boost::fusion::filter_if用法的测试程序
  5. GDCM:gdcm::Codec的测试程序
  6. C语言scanf()函数格式化输入和printf()格式化输出。
  7. VTK:Texture之TextureCutQuadric
  8. VTK:结构化网格之StructuredGrid
  9. OpenCV使用VideoWriter和VideoCapture的实例(附完整代码)
  10. OpenGL noperspective在窗口空间中线性插值的实例