_Actual_ Twitter формат для хэштегов? Не ваше регулярное выражение, не его код - настоящий? - PullRequest
14 голосов
/ 10 декабря 2011

Обновление: используйте сущности Твиттера, если можете - они поняли это для вас так же, как и для других предметов.Мой случай таков, что у меня просто твит без сущностей и всех дополнительных метаданных

Я потратил то, что считаю необоснованным количеством времени, пытаясь найти формат фактический для хэштегов.

Насколько мой поиск может сказать - Твиттер не опубликовал ни одного.

Я знаю, что многие люди придумали регулярное выражение для их анализа, однако регулярное выражение вашей библиотеки не является регулярным выражением моей библиотеки, иможет быть, мне все равно не нравится ваш.

Итак, я спрашиваю - есть ли какие-либо официальные спецификации? Я не хочу ответа регулярного выражения, я хочу BNF или что-то подобное,Или, как минимум, - полный список разделителей.

Дополнительные точки сложности - важно также извлечь их из случайных текстов сообщений Unicode (не на английском языке).

Примечание: IЯ достаточно хорошо осведомлен о сущностях, и они не применимы к моему делу (месяцы сообщений в Твиттере, хранящихся в БД).

Ответы [ 6 ]

20 голосов
/ 10 декабря 2011

С начальной точки поддержки твиттера основные правила, по-видимому, заключаются в том, что хэштегам должен предшествовать пробел и останавливаться на любом пробеле или пунктуации.


Цитата из поддержки Twitter:

Проверьте ваши хэштеги на предмет наличия следующих данных:

  • Есть ли какой-либо символ в хэштеге или после него?
    • Если вы напишите # noican't, ваше сообщение будет классифицировано как #noican. Знаки пунктуации (,.;?! И т. Д.) Будут заканчиваться вашим хэштегом везде, где есть знаки препинания.
  • Есть ли какая-либо буква перед символом?
    • Если вы напишите 23 # idoittoo или слово # idoittoo, ваши твиты не будут отображаться при поиске хэштега #idoittoo. Хештеги не будут работать с буквами или цифрами перед символом #. Символ # должен иметь пробел непосредственно перед ним, чтобы он правильно отображался при поиске.

Следовательно, начальный токен # предшествует пробел, а терминатором является любой пробел или пунктуация. « и т. Д. » в их списке знаков препинания («,.; '?! И т. Д. ») раздражает, но я продолжу копать и посмотрю, смогу ли я найти что-нибудь авторитетное на то, что еще считается пунктуацией.

Немного покопавшись, я нашел несколько интересных статей в блоге Теренса Идена ( Хештеги и неявные знания , Хэштегские стандарты ), которые свидетельствуют о том, что в Твиттере даже нет стандарт, учитывая, что программное обеспечение, которое оно разрабатывает на разных платформах, похоже, имеет разные правила того, что составляет хэштег.

Он также предоставил ссылку на библиотеку соответствия Twitter, которая имеет twitter / twitter-text-conformance / autolink.yml . Раздел hashtag в autolink.yml имеет много случаев, соответствующих приведенным выше правилам, но также некоторые из них, которые нарушают их, по-прежнему должны быть связаны автоматически. Некоторые примеры:

- 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 полон и других примеров.

11 голосов
/ 19 марта 2014

На самом деле существует официальная спецификация для хэштегов. Twitter принимает только подмножество выражений Unicode для синтаксиса хэштега. Вот регулярное выражение для распознавания всех допустимых хештегов, используемых в Twitter (взятых из их собственного исходного кода).

Чтобы увидеть, как он генерируется, посмотрите исходный код твиттер-текста .

/(#|#)([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
5 голосов
/ 28 февраля 2012

Я нашел это: "Нужна помощь в разборе текста твита?", На dev.twitter.com

Посмотрите на библиотеку обработки текста в Твиттере, которую мы используем для автоматическое связывание и извлечение имен пользователей, списков и хэштегов.

(есть ruby ​​, java и javascript библиотеки)

Они довольно огромны, так как твиттер должен учитывать все возможные случаи.

2 голосов
/ 14 июля 2016

это то, что я использую, самое близкое, что я получаю:

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

ссылка хэштега Regex для проверки

CavalcanteLeo

0 голосов
/ 28 января 2015

Библиотеки разбора сущности Twitter доступны здесь: https://github.com/twitter/twitter-text

0 голосов
/ 10 декабря 2011

Исходя из того, как официальный клиент Twitter для Mac выделяет хэштеги, я подозреваю, что правилом является любая последовательность непрерывных букв, цифр или подчеркиваний после хеша. Другими словами, это так же просто, как регулярное выражение /#\w+/ (при условии, что механизм регулярных выражений поддерживает юникод).

...