gpt4 book ai didi

无法使用 libunibreak 区分单字符单词

转载 作者:行者123 更新时间:2023-11-30 15:03:51 25 4
gpt4 key购买 nike

当我使用 libunibreak 库中的 set_word_breaks_utf32() 来浏览单词时,我看到单字母单词(即英语中的“a”、中文中的“北”等)消失了因为它们总是评估为 WORDBREAK_BREAK,因此与周围的空白无法区分。以下代码演示了该问题:

#include <stdio.h>
#include "wordbreak.h"

int main(int argc, const char* argv[]) {
int i;
uint32_t text[] = { 'T', 'h', 'i', 's', ' ', 'i', 's', ' ', 'a', ' ', 't', 'e', 's', 't', '.', '\n' };
char breaks[1024];
size_t length = sizeof(text) / sizeof(text[0]);
set_word_breaks_utf32(text, length, "", breaks);
for(i = 0; i < length; i++) putchar(text[i]);
for(i = 0; i < length; i++) putchar(breaks[i] + '0');
putchar('\n');
return 0;
}

此代码的输出清楚地表明字母“a”与周围的空格无法区分:

This is a test.
1110010000111000

如何确保单字母单词的边界在 set_word_breaks_utf32() 输出中可区分?

[很抱歉使用 line-breaks 标签,但 word-break 标签与 CSS 属性相关。]

最佳答案

Unicode Standard Annex #29并不是真正为此设计的。 set_wordbreaks_utf32() 的作用是找到每个单词边界

This is a test.
1110010000111000

T h i s ' ' i s ' ' a ' ' t e s t . '\n'
| _ _ _ | | _ | | | | _ _ _ | | |

上面的每个|都是一个单词边界,这有助于查找单词,但并不是完整的解决方案。请注意,字符串开头有一个隐式单词边界。完整的单词检测算法必须确定每个相邻单词边界之间的字符是否为 unicode 字母,并相应地将该字符标记为单词。

关于无法使用 libunibreak 区分单字符单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40536156/

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