识别推文消息中正确的主题标签索引

发布于 2025-01-10 17:07:20 字数 206 浏览 0 评论 0原文

我需要识别 Twitter 消息(各种语言、表情符号等)中的正确索引。

我找不到返回这些位置的解决方案,如下例所示。

import (
    "regexp"
    "testing"

    "github.com/stretchr/testify/require"
)

func TestA(t *testing.T) {
    text := "
              

I need to identify the correct indexes in twitter messages (various languages, emojis, etc).

I can't find a solution that returns these positions as shown in the example below.

import (
    "regexp"
    "testing"

    "github.com/stretchr/testify/require"
)

func TestA(t *testing.T) {
    text := "???????? [URGENT] Les forces de dissuasion #nucleaire de la #Russie"

    var re = regexp.MustCompile(`#([_A-Za-z0-9]+)`)

    pos := re.FindAllStringIndex(text, -1)

    // FindAllStringIndex returns
    // [0][43,53]
    // [1][60,67]

    // These are the expected positions.

    require.Equal(t, pos[0][0], 37) 
    require.Equal(t, pos[0][1], 47)

    require.Equal(t, pos[1][0], 54)
    require.Equal(t, pos[1][1], 61)
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

清眉祭 2025-01-17 17:07:20

FindAllStringIndex() 函数返回字节的位置,不是符文。

您需要导入“unicode/utf8”并使用utf8.RuneCountInString(text[:pos[0][0]])等而不是pos [0][0] 以确保计算 Unicode 代码点而不仅仅是字节:

// You can edit this code!
// Click here and start typing.
package main

import (
"regexp"
"testing"
"unicode/utf8"

"github.com/stretchr/testify/require"
)

func TestA(t *testing.T) {
text := "

The FindAllStringIndex() function returns the position of bytes, not runes.

You need to import "unicode/utf8" and use utf8.RuneCountInString(text[:pos[0][0]]) and so on instead of pos[0][0] to make sure you count the Unicode code points and not just bytes:

// You can edit this code!
// Click here and start typing.
package main

import (
    "regexp"
    "testing"
    "unicode/utf8"

    "github.com/stretchr/testify/require"
)

func TestA(t *testing.T) {
    text := "???????? [URGENT] Les forces de dissuasion #nucleaire de la #Russie"

    var re = regexp.MustCompile(`#\w+`)

    pos := re.FindAllStringIndex(text, -1)

    require.Equal(t, utf8.RuneCountInString(text[:pos[0][0]]), 37)
    require.Equal(t, utf8.RuneCountInString(text[:pos[0][1]]), 47)
    require.Equal(t, utf8.RuneCountInString(text[:pos[1][0]]), 54)
    require.Equal(t, utf8.RuneCountInString(text[:pos[1][1]]), 61)

}

See the Go demo.

Also, #\w+ is a a shorter pattern to match a # and then one or more letters, digits or underscores.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文