识别推文消息中正确的主题标签索引
我需要识别 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
FindAllStringIndex()
函数返回字节的位置,不是符文。您需要
导入“unicode/utf8”
并使用utf8.RuneCountInString(text[:pos[0][0]])
等而不是pos [0][0]
以确保计算 Unicode 代码点而不仅仅是字节:The
FindAllStringIndex()
function returns the position of bytes, not runes.You need to
import "unicode/utf8"
and useutf8.RuneCountInString(text[:pos[0][0]])
and so on instead ofpos[0][0]
to make sure you count the Unicode code points and not just bytes:See the Go demo.
Also,
#\w+
is a a shorter pattern to match a#
and then one or more letters, digits or underscores.