我的数据集在单列中包含两种不同的语言。他们是否有任何解决方案可以将 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)
例如:英语阿拉伯语需要拆分为英语和阿拉伯语(两个单独的列)
在此输入图片描述
他们有什么解决方案可以将语言分成两个不同的列吗
是的,获取组合文本并搜索可以找到的第一个阿拉伯字符的索引,然后使用该索引将文本分成 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)
#مرحبا بالعالم