日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python调换字符串顺序_python实现指定字符串交换

發布時間:2024/10/5 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python调换字符串顺序_python实现指定字符串交换 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

我想實現的功能過于復雜,我都不知道我能不能用語言表述清楚,花了五六個小時寫了這個程序,還是好好陳述一下需求吧。

因為我做命名實體識別嘛,我昨天想起來把數據擴充一下,怎么擴充呢,就是把相同類型的實體互換一下位置。例如

把這兩個互換,就可以實現擴充數據集的目的了。再對其它類型的實體也互換,例如

之類。

所以我們來整理下需求。

需求

一個大方向就是把同種類型的實體互換,并將互換后的數據寫進一個文件中,當作擴充的數據集。

如何實現實體互換呢?

識別所有類型的實體并把它們放入不同的列表中,見程序段1;

實現互換之前,需要知道用什么換?這里我用random.shuffle函數打亂實體list得到一個新的list B,將list A中的元素替換為list B的元素,見程序段2;

有了list A和list B,就可以替換了,將list A對應的元素替換為list B的元素,見程序段3;

替換完成,寫入文件,見程序段4。

看起來好像不是很復雜,其實里面有很多坑需要跨過去,只有自己動手寫才會知道問題在哪兒,編程真有意思。

import random

a = []

b = []

with open('1.txt', encoding='utf8') as file:

for line in file:

line = line.strip().split(' ')

if len(line) == 2:

a.append(line[0])

b.append(line[1])

else:

a.append('Newline')

b.append('Newline' + '\n')

with open('2.txt', 'w', encoding='utf8') as file2:

for index, value in enumerate(a):

file2.write(value + ' ' + b[index] + ' ')

loc = ''

name = ''

org = ''

loc_list = []

name_list = []

org_list = []

entity = ''

entity_list = ['LOC', 'ORG', 'NAME', 'TITLE', 'RACE', 'PRO', 'EDU', 'CONT']

# all_entity_list是雙重列表,子列表是每種實體的列表

all_entity_list = []

all_entity_list_copy = []

# 生成LOC實體列表

# 用random.shuffle會改變loc_list的所有副本,即便你在使用shuffle之前就copy了一份,還是會被改掉。

# 所以我用一個新的空列表來接收原列表的值

# 程序段1:識別不同類型的實體并分別存入兩個list中,這是因為后面shuffle操作會打亂list,所以多保存一個list方便實現之后的替換。

for ind, val in enumerate(entity_list):

part_entity_list = []

# 得從這兒開始就創建copy

part_entity_list_copy = []

for index, value in enumerate(b):

if value.find(val) != -1:

entity += a[index] + ' ' + value + ' '

if value.find('E-' + val) != -1:

part_entity_list.append(entity)

part_entity_list_copy.append(entity)

entity = ''

all_entity_list.append(part_entity_list)

all_entity_list_copy.append(part_entity_list_copy)

# print(all_entity_list)

# 保留原列表,并生成shuffle后的列表

# all_entity_list_copy = []

# loc_list_copy=loc_list

# print('*****',all_entity_list_copy)

# shuffle all_entity_list中的子列表

# 程序段2:打亂原實體list

all_entity_list_shuffle = []

for part_entity_list in all_entity_list:

random.shuffle(part_entity_list)

all_entity_list_shuffle.append(part_entity_list)

# 驗證是否shuffle成功

print('*****', all_entity_list_copy)

print('*****', all_entity_list_shuffle)

file3 = open('2.txt', encoding='utf8')

# 程序段3:將list A中的元素替換為list B的元素

with open('4.txt', 'w', encoding='utf8') as file4:

# 對每一行而言

for i in file3:

# 對于不同類型的實體,我需要嵌套多個for循環

for ind, part_entity_list in enumerate(all_entity_list_copy):

# 進入每個子列表

for index, value in enumerate(part_entity_list):

# print(value+'\n')

# print(all_entity_list[ind][index]+'\n')

if i.find(value) != -1:

# print(value+'\n')

# print(all_entity_list_shuffle[ind][index]+'\n')

i = i.replace(value, all_entity_list[ind][index])

# 當我在一個句子中找到第一個要被替換的字符串后,先替換,然后就跳出for循環,

# 不然的話程序會一直檢測這個句子中是否還有要被替換的字符串,那我之前做的替換就會被后面的所取代。

break

file4.write(i)

# 程序段4:生成一個新的打亂后的文件5.txt

words=[]

labels=[]

with open('4.txt', encoding='utf-8') as file:

for line in file:

line = line.strip().split(' ')

for num in range(len(line)):

if (num+1)%2==0:

labels.append(line[num])

else:

words.append(line[num])

with open('5.txt', 'w',encoding='utf-8') as f:

for num in range(len(labels)):

f.write(words[num]+' '+labels[num]+'\n')

file5 = open('5.txt', encoding='utf-8')

with open('6.txt', 'w', encoding='utf-8') as file6:

text = file5.read()

file6.write(text.replace('Newline', ''))

效果圖

源文件

現文件

剩下的就是把源文件和現文件復制粘貼到一起作為一個數據集了,不知道這樣會不會提升模型精度,但愿吧。

總結

以上是生活随笔為你收集整理的python调换字符串顺序_python实现指定字符串交换的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。