在R中使用变音符号处理字符数

Ste*_*ano 5 unicode nlp r linguistics character-encoding

我正在尝试使用变音符号来获取字符串中的字符数,但我无法设法获得正确的结果。

> x <- "n?ala"
> nchar(x)
[1] 5
Run Code Online (Sandbox Code Playgroud)

我想得到的是4,因为n?应该将其视为一个字符(即变音符号不应被单独视为字符,即使在基本字符上堆叠了多个变音符号也是如此)。

我如何获得这种结果?

Sab*_*DeM 2

这是我的解决方案。这个想法是拼音字母可以有一个 unicode 表示,然后:

\n\n

使用Unicode包;它提供的功能Unicode_alphabetic_tokenizer是:

\n\n
\n

标记化首先将 x 的元素替换为其 Unicode\n 字符序列。然后,将非字母字符(即不具有字母属性的字符)替换为空格,并根据空格分割相应的字符串。

\n
\n\n

在此之后,我使用了nchar但因为将其拆分为前一个函数的两个子字符串,所以我使用了sum.

\n\n
sum(nchar(Unicode_alphabetic_tokenizer(x)))\n[1] 4\n
Run Code Online (Sandbox Code Playgroud)\n\n

我相信这个包在这种情况下非常有用,但我不是专家,我不知道我的解决方案是否适用于所有涉及拼音字母的问题。也许其他例子可能有助于说明我的解决方案的有效性。

\n\n

效果很好

\n\n

这是另一个例子:

\n\n
> x <- "e\xcc\xaf \xca\x8a\xcc\xaf"\n> x\n[1] "e\xcc\xaf \xca\x8a\xcc\xaf"\n> nchar(x)\n[1] 5\n> sum(nchar(Unicode_alphabetic_tokenizer(x)))\n[1] 2\n
Run Code Online (Sandbox Code Playgroud)\n\n

ps\n代码中只有一个",复制粘贴后出现第二个。我不知道为什么会发生这种情况。

\n