Формат _Actual_ Twitter для хэштегов? Не ваше регулярное выражение, а не его код - фактический?
Обновление: используйте объекты Twitter, если вы можете - они поняли это как для вас, так и для других предметов. Мое дело в том, что у меня просто есть твит без сущностей и все дополнительные метаданные
Я потратил то, что считаю необоснованным время, пытаясь найти фактический формат для хэштегов.
Насколько я могу сказать, Twitter не опубликовал ни одного.
Я знаю, что многие люди придумали регулярное выражение для их анализа, однако ваше регулярное выражение lib не является моим регулярным выражением lib и, возможно, мне все равно не нравится.
Итак, я спрашиваю: есть ли какие-либо фактические официальные спецификации? Я не хочу отвечать регулярным выражением, я хочу BNF или что-то подобное. Или минимально - полный список разделителей.
Дополнительные точки сложности - захват их из случайных сообщений unicode (неанглийский) также важен.
Примечание. Я прекрасно знаю сущности, и они не применимы к моему делу (месяцы сообщений Twitter, хранящихся в db).
Ответы
Ответ 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)
Они довольно огромны, поскольку твиттер должен учитывать все возможные случаи.
Ответ 4
это то, что я использую, ближайший я получаю:
/#(\w*[0-9a-zA-Z]+\w*[0-9a-zA-Z])/g
ссылка для проверки хэштега Regex
![CavalcanteLeo]()
Ответ 5
Основываясь на том, как официальный клиент Twitter для Mac выделяет хэштеги, я подозреваю, что это правило представляет собой последовательность последовательных букв, цифр или подчеркиваний, следующих за хешем. Другими словами, это так же просто, как регулярное выражение /#\w+/
(предполагая механизм регулярного выражения, поддерживающий unicode).
Ответ 6
Библиотеки разбора сущностей Twitter доступны здесь: https://github.com/twitter/twitter-text