如何将单列中的两种不同语言分离到两个不同的列

问题描述 投票:0回答:1

我的数据集在单列中包含两种不同的语言。他们是否有任何解决方案可以将 QGIS 中的语言拆分为两个不同的列 下面提到的示例供快速参考。我在下面添加了 python 脚本,但它仅将一种语言与其他列分开。

import re

#Change these three lines to match your layer and field names
layer = QgsProject.instance().mapLayersByName("plingplong")[0]
field_to_read = "fielda"
field_to_update = "Required N"

fieldindex = layer.fields().indexFromName(field_to_update) #Find the index of the field to update
new_attributes = {} 
pattern = r"(?i)\b[a-z]+\b"
for feature in layer.getFeatures():
    words = ' '.join(re.findall(pattern, feature[field_to_read]))
    #print(words)
    #hello
    #this is a text
    new_attributes[feature.id()]={fieldindex:words}

#new_attributes is now, each features id: {index of field to update: new text} 
#{0: {1: 'hello'}, 1: {1: 'this is a text'}}

layer.dataProvider().changeAttributeValues(new_attributes)

例如:英语阿拉伯语需要拆分为英语和阿拉伯语(两个单独的列)

在此输入图片描述

python text split multiple-columns qgis
1个回答
2
投票

他们有什么解决方案可以将语言分成两个不同的列吗

是的,获取组合文本并搜索可以找到的第一个阿拉伯字符的索引,然后使用该索引将文本分成 2 个,第一个是英语,第二个是阿拉伯语。

我假设文本始终是英语+阿拉伯语

从来没有 英语+阿拉伯语+英语 阿拉伯语+英语 或任何其他组合

如果您想使用正则表达式,请检查此答案

简单示例:

import re
combined_text = 'Hello World مرحبا بالعالم'

pattern = re.compile('[\u0627-\u064a]')

index = re.search(pattern, combined_text).start()

english = combined_text[:index]
arab = combined_text[index:]

print(english)
# Hello World
print(arab)
#مرحبا بالعالم

© www.soinside.com 2019 - 2024. All rights reserved.