gpt4 book ai didi

java - 如何判断一个码位序列是否构成一个自然字符?

转载 作者:搜寻专家 更新时间:2023-11-01 02:52:15 24 4
gpt4 key购买 nike

大家下午好

我正在构建一个函数,它将字符串作为输入,从字符串中删除任何不自然的组合变音符号,然后返回修改后的字符串作为输入。

不自然的组合变音符号序列是 unicode 代码点的序列,组合后会产生不属于任何语言的输出(古代文字/语言被视为自然语言)。

例如,给定字符串输入:

   "aaà̴̵̶̷̸̡̢̧̨̛̖̗̘̙̜̝̞̟̠̣̤̥̦̩̪̫̬̭̮̯̯̰̱̲̳̹̺̻̼͇͈͉͍͎́̂̃̄̅̆̇̈̉̊̋̌̍̎̏̐̑̒̓̔̽̾̿̀́͂̓̈́͆͊͋͌̕̚͠͡ͅaa" //code points 0061 0061 0061 0300 0301 0302 0303 0304 0305 0306 0307 0308 0309 030a 030b 030c 030d 030e 030f 0310 0311 0312 0313 0314 0315 0316 0317 0318 0319 031a 031b 031c 031d 031e 031f 0320 0321 0322 0323 0324 0325 0326 0327 0328 0329 032a 032b 032c 032d 032e 032f 032f 0330 0331 0332 0333 0334 0335 0336 0337 0338 0339 033a 033b 033c 033d 033e 033f 0340 0341 0342 0343 0344 0345 0346 0347 0348 0349 034a 034b 034c 034d 034e 0360 0361 0061 0061

,函数应该返回结果aaàaa(代码点0061 0061 0061 0300 0061 0061),

因为 à́(代码点 0061 0300 0301)不是任何自然语言中的字符。换句话说:

  assert F("aaà̴̵̶̷̸̡̢̧̨̛̖̗̘̙̜̝̞̟̠̣̤̥̦̩̪̫̬̭̮̯̯̰̱̲̳̹̺̻̼͇͈͉͍͎́̂̃̄̅̆̇̈̉̊̋̌̍̎̏̐̑̒̓̔̽̾̿̀́͂̓̈́͆͊͋͌̕̚͠͡ͅaa").equals("aaàaa");

或者对于使用拉丁字符集保存的源代码:

 assert F("\u0061\u0061\u0061\u0300\u0301\u0302\u0303\u0304\u0305\u0306\u0307\u0308\u0309\u030a\u030b\u030c\u030d\u030e\u030f\u0310\u0311\u0312\u0313\u0314\u0315\u0316\u0317\u0318\u0319\u031a\u031b\u031c\u031d\u031e\u031f\u0320\u0321\u0322\u0323\u0324\u0325\u0326\u0327\u0328\u0329\u032a\u032b\u032c\u032d\u032e\u032f\u032f\u0330\u0331\u0332\u0333\u0334\u0335\u0336\u0337\u0338\u0339\u033a\u033b\u033c\u033d\u033e\u033f\u0340\u0341\u0342\u0343\u0344\u0345\u0346\u0347\u0348\u0349\u034a\u034b\u034c\u034d\u034e\u0360\u0361\u0061\u0061").equals("\u0061\u0061\u0061\u0300\u0061\u0061");

我们如何确定字符序列或 unicode 代码点序列是否自然

或者更确切地说,属于自然语言的字符将使用多少组合变音符号?

最佳答案

Unicode 6.0 :

All combining characters can be applied to any base character and can, in principle, be used with any script. As with other characters, the allocation of a combining character to one block or another identifies only its primary usage; it is not intended to define or limit the range of characters to which it may be applied. In the Unicode Standard, all sequences of character codes are permitted.

This does not create an obligation on implementations to support all possible combinations equally well. Thus, while application of an Arabic annotation mark to a Han character or a Devanagari consonant is permitted, it is unlikely to be supported well in rendering or to make much sense.

Unicode data 中不太可能有足够的信息用算法来做到这一点。

规范 composition/decomposition 有一些规则你可以用它来确定一个序列是否是一个“自然”序列。例如,将 U+0065 U+0301 映射到 U+00E9 (é.) 但这并不适用于所有情况。

除此之外,如果不使用由专家构建的某种形式的验证表或从某些语言数据集生成的验证表,我不确定您能做什么。

关于java - 如何判断一个码位序列是否构成一个自然字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9047318/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com