14

更新:如果可以,请使用 Twitter 的实体——他们为您以及其他项目找到了答案。我的情况是我只有没有实体的推文和所有额外的元数据

我花了我认为不合理的时间试图找到主题标签的实际格式。

据我的搜索可以看出 - Twitter 尚未发布。

我知道很多人都想出了正则表达式来解析它们,但是,你的库的正则表达式不是我的库的正则表达式,也许我不喜欢你的。

所以我在问-是否有任何实际的官方规格?我不想要一个正则表达式的答案,我想要一个 BNF 或类似的东西。或者至少 - 分隔符的完整列表。

额外的难点——从随机的 unicode 消息(非英语)文本中获取它们也很重要。

注意:我非常了解实体,它们不适用于我的案例(存储在数据库中的几个月的 Twitter 消息)。

4

6 回答 6

20

从twitter 支持的起点来看,基本规则似乎是主题标签必须以空格开头,并在任何空格或标点符号处停止。


引自 Twitter 的支持:

检查您的主题标签以获取以下内容:

  • 主题标签中或之后是否有任何符号?
    • 如果您写#noican't,您的消息将被归类为#noican。标点符号( , . ; ' ? ! 等)将在标点符号出现的地方结束您的主题标签。
  • #symbol 前面有字母吗?
    • 如果你写 23#idoittoo 或 word#idoittoo,你的推文将不会显示在标签 #idoittoo 的搜索中。Hashtags 不适用于# 符号前面的字母或数字。# 符号前面必须有一个空格,才能在搜索中正确显​​示。

因此,初始标记#前面有一个空格,终止符是任何空格或标点符号。他们的标点符号列表中的“”(“ , . ; ' ?

经过一段时间的挖掘,我发现了 Terence Eden 的一些有趣的博客文章(Hashtags and Implicit Knowledge , Hashtag Standards),这些文章提供了 Twitter 甚至没有标准的证据,因为它在不同平台上开发的软件似乎有不同的什么是主题标签的规则。

它还提供了一个指向 Twitter 一致性库的链接,其中包含twitter / twitter-text-conformance / autolink.ymlautolink.yml中的hashtag部分有很多符合上述规则的情况,但也有一些违反它们的情况仍然应该自动链接。一些例子:

- description: "DO NOT Autolink all-numeric hashtags"
  text: "text #1234"
  expected: "text #1234"

- description: "Autolink hashtag preceded by a period"
  text: "text.#hashtag"
  expected: "text.<a href=\"http://twitter.com/search?q=%23hashtag\" title=\"#hashtag\" class=\"tweet-url hashtag\">#hashtag</a>"

- description: "Autolink hashtag with full-width hash (U+FF03)"
  text: "#hashtag"
  expected: "<a href=\"http://twitter.com/search?q=%23hashtag\" title=\"#hashtag\" class=\"tweet-url hashtag\">#hashtag</a>"

这些只是与第一篇支持文章中给出的基本规则不匹配的几个示例,不幸的yml是,其中还有很多其他示例。

于 2011-12-09T21:32:56.073 回答
17

事实上,标签有一个官方规范。Twitter 仅接受主题标签语法的 Unicode 表达式子集。这是识别 Twitter 上使用的所有有效标签的正则表达式(从他们自己的源代码中提取。)

要查看它是如何生成的,请参见twitter-text 的源代码

/(#|#)([a-z0-9_\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u00ff\u0100-\u024f\u0253-\u0254\u0256-\u0257\u0300-\u036f\u1e00-\u1eff\u0400-\u04ff\u0500-\u0527\u2de0-\u2dff\ua640-\ua69f\u0591-\u05bf\u05c1-\u05c2\u05c4-\u05c5\u05d0-\u05ea\u05f0-\u05f4\ufb12-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb40-\ufb41\ufb43-\ufb44\ufb46-\ufb4f\u0610-\u061a\u0620-\u065f\u066e-\u06d3\u06d5-\u06dc\u06de-\u06e8\u06ea-\u06ef\u06fa-\u06fc\u0750-\u077f\u08a2-\u08ac\u08e4-\u08fe\ufb50-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\u200c-\u200c\u0e01-\u0e3a\u0e40-\u0e4e\u1100-\u11ff\u3130-\u3185\ua960-\ua97f\uac00-\ud7af\ud7b0-\ud7ff\uffa1-\uffdc\u30a1-\u30fa\u30fc-\u30fe\uff66-\uff9f\uff10-\uff19\uff21-\uff3a\uff41-\uff5a\u3041-\u3096\u3099-\u309e\u3400-\u4dbf\u4e00-\u9fff\u20000-\u2a6df\u2a700-\u2b73f\u2b740-\u2b81f\u2f800-\u2fa1f]*[a-z_\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u00ff\u0100-\u024f\u0253-\u0254\u0256-\u0257\u0300-\u036f\u1e00-\u1eff\u0400-\u04ff\u0500-\u0527\u2de0-\u2dff\ua640-\ua69f\u0591-\u05bf\u05c1-\u05c2\u05c4-\u05c5\u05d0-\u05ea\u05f0-\u05f4\ufb12-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb40-\ufb41\ufb43-\ufb44\ufb46-\ufb4f\u0610-\u061a\u0620-\u065f\u066e-\u06d3\u06d5-\u06dc\u06de-\u06e8\u06ea-\u06ef\u06fa-\u06fc\u0750-\u077f\u08a2-\u08ac\u08e4-\u08fe\ufb50-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\u200c-\u200c\u0e01-\u0e3a\u0e40-\u0e4e\u1100-\u11ff\u3130-\u3185\ua960-\ua97f\uac00-\ud7af\ud7b0-\ud7ff\uffa1-\uffdc\u30a1-\u30fa\u30fc-\u30fe\uff66-\uff9f\uff10-\uff19\uff21-\uff3a\uff41-\uff5a\u3041-\u3096\u3099-\u309e\u3400-\u4dbf\u4e00-\u9fff\u20000-\u2a6df\u2a700-\u2b73f\u2b740-\u2b81f\u2f800-\u2fa1f][a-z0-9_\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u00ff\u0100-\u024f\u0253-\u0254\u0256-\u0257\u0300-\u036f\u1e00-\u1eff\u0400-\u04ff\u0500-\u0527\u2de0-\u2dff\ua640-\ua69f\u0591-\u05bf\u05c1-\u05c2\u05c4-\u05c5\u05d0-\u05ea\u05f0-\u05f4\ufb12-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb40-\ufb41\ufb43-\ufb44\ufb46-\ufb4f\u0610-\u061a\u0620-\u065f\u066e-\u06d3\u06d5-\u06dc\u06de-\u06e8\u06ea-\u06ef\u06fa-\u06fc\u0750-\u077f\u08a2-\u08ac\u08e4-\u08fe\ufb50-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\u200c-\u200c\u0e01-\u0e3a\u0e40-\u0e4e\u1100-\u11ff\u3130-\u3185\ua960-\ua97f\uac00-\ud7af\ud7b0-\ud7ff\uffa1-\uffdc\u30a1-\u30fa\u30fc-\u30fe\uff66-\uff9f\uff10-\uff19\uff21-\uff3a\uff41-\uff5a\u3041-\u3096\u3099-\u309e\u3400-\u4dbf\u4e00-\u9fff\u20000-\u2a6df\u2a700-\u2b73f\u2b740-\u2b81f\u2f800-\u2fa1f]*)/gi
于 2014-03-18T20:56:13.510 回答
5

我在 dev.twitter.com 上发现了这个:“需要帮助解析推文文本吗?”

看看我们用于自动链接和提取用户名、列表和主题标签的 Twitter 文本处理库。

(有ruby​​ 、javajavascript库)

它们非常庞大,因为 twitter 必须考虑到所有可能的情况。

于 2012-02-28T09:39:40.303 回答
3

这是我使用的,我得到的最接近的:

/#(\w*[0-9a-zA-Z]+\w*[0-9a-zA-Z])/g

要测试的主题标签正则表达式的链接

卡瓦尔坎特里奥

于 2016-07-14T20:21:45.423 回答
0

Twitter 实体解析库可在此处获得:https ://github.com/twitter/twitter-text

于 2015-01-28T15:07:21.643 回答
0

根据 Mac 的官方 Twitter 客户端如何突出主题标签,我怀疑该规则是哈希后的任何连续字母、数字或下划线序列。换句话说,它和正则表达式一样简单/#\w+/(假设是一个支持 unicode 的正则表达式引擎)。

于 2011-12-09T21:28:12.753 回答