Подтвердить что ты не робот

Формат _Actual_ Twitter для хэштегов? Не ваше регулярное выражение, а не его код - фактический?

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

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

Насколько я могу сказать, Twitter не опубликовал ни одного.

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

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

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

Примечание. Я прекрасно знаю сущности, и они не применимы к моему делу (месяцы сообщений Twitter, хранящихся в db).

4b9b3361

Ответ 1

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


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

Проверьте ваши хэш-теги на следующее:

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

Следовательно, начальный токен #, которому предшествует пробел, а терминатор - это пробелы или знаки препинания. "И т.д." В их списке знаков препинания ( ",."?? И т.д.) Раздражает, но я буду продолжать копать и посмотреть, могу ли я найти что-то авторитетное в том, что еще считается препинанием.

После копания некоторое время я нашел интересные статьи в блоге Terence Eden (Hashtags и Implicit Knowledge, Стандарты Hashtag), которые свидетельствуют о том, что у Twitter нет даже стандарта, учитывая, что программное обеспечение, которое оно разрабатывает на разных платформах, похоже, имеет разные правила того, что составляет хэштег.

Он также предоставил ссылку на библиотеку Conformance Twitter, в которой твиттер/твиттер-текст-соответствие/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 также содержит другие примеры.

Ответ 2

Фактически существует официальная спецификация хэштегов. Twitter принимает только подмножество выражений Unicode для синтаксиса hashtag. Вот регулярное выражение, чтобы распознать все допустимые Hashtags, используемые в 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

Ответ 3

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

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

(там ruby ​​, java и javascript librairies)

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

Ответ 5

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