- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个包含英语和阿拉伯语的字符串。我正在使用 API,这就是我无法在其中设置指标的原因。
我想要得到的是:阿拉伯语和英语分成两部分。这是一个示例字符串:
"بِاسْمِكَ رَبِّي وَضَعْتُ جَنْبِي، وَبِكَ أَرْفَعُهُ، فَإِنْ أَمْسَكْتَ نَفْسِي فَارْحَمْهَا، وَإِنْ أَرْسَلْتَهَا فَاحْفَظْهَا، بِمَا تَحْفَظُ بِهِ عِبَادَكَ الصَّالِحِينَ.Bismika rabbee wadaAAtu janbee wabika arfaAAuh, fa-in amsakta nafsee farhamha, wa-in arsaltaha fahfathha bima tahfathu bihi AAibadakas-saliheen. In Your name my Lord, I lie down and in Your name I rise, so if You should take my soul then have mercy upon it, and if You should return my soul then protect it in the manner You do so with Your righteous servants.",
我找不到如何将它分成两部分,我将阿拉伯语和英语分成两个不同的部分。
我想要的:
所以可以有任何语言,我的问题是只取出英语或阿拉伯语并在各自的字段中显示它们。
我怎样才能实现它?
最佳答案
您可以使用 Natural Language Tagger ,即使两个脚本混合在一起也能工作:
import NaturalLanguage
let str = "¿como? بداية start وسط middle начать средний конец نهاية end. 從中間開始. "
let tagger = NLTagger(tagSchemes: [.script])
tagger.string = str
var index = str.startIndex
var dictionary = [String: String]()
var lastScript = "other"
while index < str.endIndex {
let res = tagger.tag(at: index, unit: .word, scheme: .script)
let range = res.1
let script = res.0?.rawValue
switch script {
case .some(let s):
lastScript = s
dictionary[s, default: ""] += dictionary["other", default: ""] + str[range]
dictionary.removeValue(forKey: "other")
default:
dictionary[lastScript, default: ""] += str[range]
}
index = range.upperBound
}
print(dictionary)
如果你愿意,打印结果:
for entry in dictionary {
print(entry.key, ":", entry.value)
}
产量:
Hant : 從中間開始.
Cyrl : начать средний конец
Arab : بداية وسط نهاية
Latn : ¿como? start middle end.
这仍然不完美,因为语言标注器只检查单词中最多字母属于哪个脚本。例如,在您正在处理的字符串中,标注器会将 الصوّالِحِينو.Bismika
视为一个词。为了克服这个问题,我们可以使用两个指针并遍历原始字符串并分别检查 words 的脚本。单词被定义为连续的字母:
let str = "بِاسْمِكَ رَبِّي وَضَعْتُ جَنْبِي، وَبِكَ أَرْفَعُهُ، فَإِنْ أَمْسَكْتَ نَفْسِي فَارْحَمْهَا، وَإِنْ أَرْسَلْتَهَا فَاحْفَظْهَا، بِمَا تَحْفَظُ بِهِ عِبَادَكَ الصَّالِحِينَ.Bismika rabbee wadaAAtu janbee wabika arfaAAuh, fa-in amsakta nafsee farhamha, wa-in arsaltaha fahfathha bima tahfathu bihi AAibadakas-saliheen. In Your name my Lord, I lie down and in Your name I rise, so if You should take my soul then have mercy upon it, and if You should return my soul then protect it in the manner You do so with Your righteous servants."
let tagger = NLTagger(tagSchemes: [.script])
var i = str.startIndex
var dictionary = [String: String]()
var lastScript = "glyphs"
while i < str.endIndex {
var j = i
while j < str.endIndex,
CharacterSet.letters.inverted.isSuperset(of: CharacterSet(charactersIn: String(str[j]))) {
j = str.index(after: j)
}
if i != j { dictionary[lastScript, default: ""] += str[i..<j] }
if j < str.endIndex { i = j } else { break }
while j < str.endIndex,
CharacterSet.letters.isSuperset(of: CharacterSet(charactersIn: String(str[j]))) {
j = str.index(after: j)
}
let tempo = String(str[i..<j])
tagger.string = tempo
let res = tagger.tag(at: tempo.startIndex, unit: .word, scheme: .script)
if let s = res.0?.rawValue {
lastScript = s
dictionary[s, default: ""] += dictionary["glyphs", default: ""] + tempo
dictionary.removeValue(forKey: "glyphs")
}
else { dictionary["other", default: ""] += tempo }
i = j
}
关于ios - 如何使用 Swift 4 将字符串拆分为英语和非英语?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55242906/
问题与现象 多语言开发是一件成本很高的事情。 很多公司会退而求其次选择只开发英文版本的软件分发到不同国家,但这里仍存在不同问题。 我们就遇到了这样的问题,参考下面的代码。 CultureInf
在我的 codeigniter 项目中,我使用 MySQL 作为数据库。它的排序规则是“latin1_swedish_ci”。现在我需要扩展我的网站,除了“英语”之外还存储“波兰语”、“德语”、“法语
从摩尔斯语翻译成英语就像一个魅力,但是将一个短语或句子(多个单词用空格分隔)从英语翻译成摩尔斯语只会产生翻译成摩尔斯语的第一个单词。例如,如果我输入“Hello World”,翻译器只会返回 '……
试图在谷歌上搜索一些提供英语、葡萄牙语和西类牙语国家和国籍列表的来源……没有运气。有人知道吗? 一个多语言网站的链接,其中包含三种语言的任何这些列表的表格也很棒!! 最佳答案 它在 unicode
在过去的 15 天或更长时间里,我一直在为一个奇怪的问题而苦苦挣扎。实际上我有一些阿拉伯语文本,但也有一些英文文本。 MY NAME "some arabic text" "some arabic t
我有这种日期格式: Mon, Nov 19, 2018 我希望它采用法语短日期格式(DD/MM/YYY) 但我无法用excel的基本日期格式解决它。 有任何想法吗 ? 最佳答案 您可以使用 MATCH
我被要求制作一个软件来加密和解密基于字母 frequencies 的“普通英语”文本。 . 问题是我在哪里可以找到一些与官方频率匹配的文本样本? 到目前为止,我已经尝试过 "War and Peace
我正在使用 kivy 的文件选择器,当文件夹中有一个带有希伯来语名称的文件时,它会打印出乱码......如果可能的话,我想支持不同的语言。尝试更改文件选择器中的字体名称,对我来说不起作用。你能帮我找出
Popup Click me to toggle the popup! A Simple Popup! // When the user clicks on div, open the po
我刚刚下载了最新的 NLTK 版本及其所有资源。 我看到 could 和 would 没有被列为停用词。但是 should 被视为停用词。 这是某种已知错误还是...? In [7]: import
我开发了一个短信发送器应用程序,我想知道用户使用的语言。那么,当用户键入一条消息时,我如何知道他/她使用的语言? 最佳答案 通过使用获取输入类型管理器: InputMethodManager imm
在 PHP 中使用正则表达式,如何让用户输入阿拉伯语、英语、数字、_、- 或空格。 例如,用户可以输入以下字符串: 10-abc 10-米 10-abcmo _abcمن-10 最佳答案 要检查您可以
作为我正在编写的一个小程序的一部分,我需要过滤一个可能是“gibrish”的字符串输入(UTF8 中的任何符号)输入可以是希伯来语和/或英语,但也有所有正常的符号,如:?%$!@'_' 等等... 一
也许有人知道从中检索翻译的最佳方式是什么。是否有用于阅读 Multitran 词典数据库的图书馆?我的目标是一个简单的程序,它将检索给定的俄语单词的英文翻译。 最佳答案 也许你可以使用 StarDic
在 chrome://settings/fonts 什么是标准字体,衬线字体,无衬线字体和固定宽度字体? 对于不使用Windows但希望尽可能使用相同(或相似)设置的用户,这是必需的。 最佳答案 St
我正在尝试查找四元组英语单词,我尝试更改 alpino,它将荷兰语单词下载为 en 或英语,但它不起作用任何想法? from nltk.util import ngrams from nltk.cor
这个问题在这里已经有了答案: UTF-8 all the way through (13 个答案) 关闭 8 年前。 我们允许用户在文本字段中输入任何语言,并将该值存储在数据库中,当用户在浏览器中查
我正在尝试在 Rails 中使用英语 gem,因此我可以访问 $LAST_MATCH_INFO,$~ 的隐秘版本。然而,尽管需要英语,$LAST_MATCH_INFO 始终是 nil,而 $~ 仍然有
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
当您设计应用程序时(假设使用英语),并要求用户提供目录/文件夹的路径,您是否使用术语目录或文件夹? 其中一个比另一个更容易被理解吗?其中一个比另一个更“正确”吗? 最佳答案 请注意,它们不是同义词。目
我是一名优秀的程序员,十分优秀!