sentiment .net regex twitter

.net - sentiment - python twitter analysis



Mejor HashTag Regex (8)

Tuiteé una cadena con etiquetas hash colocadas al azar, vi lo que Twitter hizo con ella, y luego traté de combinarla con una expresión regular. Esto es lo que obtuve:

/ B # / w * [a-zA-Z] + / w *

#face #Fa ! ce algo #iam # 1 # 1 # 919 #jifdosaj algo # idfsjoa 9 # 9 # 98 9 # 9f9j # 9jlasdjl # jklfdsajl34 # 34239 #jkf #a * # 1j3rj3

Estoy tratando de encontrar todas las etiquetas hash en una cadena. Los hashtags son de una transmisión como Twitter, podrían estar en cualquier parte del texto, como:

este es un evento #awesome, vamos a usar la etiqueta #fun

Estoy usando .NET framework (c #), estaba pensando que este sería un patrón regex adecuado para usar:

# / w +

¿Es esta la mejor expresión regular para este propósito?


He probado algunos tweets y me di cuenta de que hashtags:

  • Están compuestos por caracteres alfanuméricos más subrayado.
  • Debe tener al menos 1 letra o guión bajo.
  • Puede tener el carácter de punto, pero el hashtag se interpretará como un enlace a un sitio externo. (No lo considero)

Entonces, eso es lo que tengo:

/B#(/w*[A-Za-z_]+/w*)


este es el que escribí que busca límites de palabras y solo coincide con el texto hash (?<=#)/w*?(?=/W) .


Por lo que puedo decir, este patrón funciona mejor. Los otros publicados aquí no tienen en cuenta que un hashtag que comienza con números no es válido. Por favor, asegúrese de usar solo el segundo grupo de captura cuando extraiga el hashtag.

(^|/s)#([A-Za-z_][A-Za-z0-9_]*)

Tenga en cuenta que también he limitado explícitamente lookaheads y lookbehinds debido a sus penalizaciones de rendimiento.


Después de ver las respuestas anteriores aquí y hacer algunos tweets de prueba para ver lo que le gustó a Twitter, creo que he encontrado una expresión regular sólida que debería funcionar. Requiere una funcionalidad similar en el motor de expresiones regulares, por lo que podría no funcionar con todos los motores. Todavía debería funcionar bien para .NET y PCRE.

(?:(?<=/s)|^)#(/w*[A-Za-z_]+/w*)

De acuerdo con RegexBuddy, esto hace lo siguiente:

Y de nuevo, según RegexBuddy, esto es lo que coincide:

Todo lo resaltado es parte del partido. La parte más oscura resaltada indica qué devuelve la captura.

Editar diciembre de 2014:
Aquí hay una versión ligeramente simplificada de zero323 que debería ser funcionalmente equivalente:

(?<=/s|^)#(/w*[A-Za-z_]+/w*)


Si está extrayendo estados que contienen hashtags de Twitter, ya no tendrá que encontrarlos usted mismo. Ahora puede especificar el parámetro include_entities para que Twitter invoque automáticamente menciones, enlaces y hashtags.

Por ejemplo, tome la siguiente llamada a status / show :

http://api.twitter.com/1/statuses/show/60183527282577408.json?include_entities=true

En el JSON resultante, observe el objeto de las entidades .

"entities":{"urls":[{"expanded_url":null,"indices":[68,88],"url":"http:////bit.ly//gWZmaJ"}],"user_mentions":[],"hashtags":[{"text":"wordpress","indices":[89,99]}]}

Puede usar lo anterior para ubicar las entidades específicas en el tweet (que se producen entre las posiciones de cadena indicadas por la propiedad de índices ) y transformarlas adecuadamente.

Si solo necesita la expresión regular para ubicar los hashtags, Twitter los proporciona en una biblioteca de código abierto .

Patrón de coincidencia Hashtag

(^|[^&/p{L}/p{M}/p{Nd}_/u200c/u200d/ua67e/u05be/u05f3/u05f4/u309b/u309c/u30a0/u30fb/u3003/u0f0b/u0f0c/u00b7])(#|/uFF03)(?!/uFE0F|/u20E3)([/p{L}/p{M}/p{Nd}_/u200c/u200d/ua67e/u05be/u05f3/u05f4/u309b/u309c/u30a0/u30fb/u3003/u0f0b/u0f0c/u00b7]*[/p{L}/p{M}][/p{L}/p{M}/p{Nd}_/u200c/u200d/ua67e/u05be/u05f3/u05f4/u309b/u309c/u30a0/u30fb/u3003/u0f0b/u0f0c/u00b7]*)

El patrón anterior se puede reconstruir a partir de este archivo java (recuperado el 2015-11-23). Las pruebas de validación para este patrón se encuentran en este archivo alrededor de la línea 128.



Depende de si desea unir hashtags dentro de otras cadenas ("Some # Word") o cosas que probablemente no sean hashtags ("We''re # 1"). La expresión regular que diste #/w+ coincidirá en ambos casos. Si modifica ligeramente su expresión regular a /B#/w/w+ , puede eliminar estos casos y solo debe coincidir con hashtags de longitud mayor a 1 en los límites de las palabras.