【问题标题】:detect emoticon in a sentence using regex python [duplicate]使用正则表达式python检测句子中的表情符号[重复]
【发布时间】:2023-03-24 13:08:01
【问题描述】:

这里是表情列表:http://en.wikipedia.org/wiki/List_of_emoticons 我想形成一个正则表达式来检查句子中是否存在这些表情符号。例如,“嘿,我很好 :)”或“我很生气和悲伤 :(”,但维基百科的列表中有很多表情符号,所以我想知道如何才能完成这项任务。 我是正则表达式的新手。 & Python。

>>> s = "hey there I am good :)"
>>> import re
>>> q = re.findall(":",s)
>>> q
[':']

【问题讨论】:

  • This 会回答你的问题。
  • 只匹配 :( 和 :) 但我有一个来自维基百科的庞大列表
  • 这个答案应该足以引导您找到解决方案。不要指望完整的解决方案。
  • @tobias_k m 使用此列表。 en.wikipedia.org/wiki/List_of_emoticons 所以是的。
  • @fscore 你可能想要一个赏金......然后

标签: python regex nlp emoticons


【解决方案1】:

我看到了解决您问题的两种方法:

  1. 或者,您可以为“通用笑脸”创建正则表达式并尝试尽可能多地匹配,而不会使其过于复杂和疯狂。例如,您可以说每个笑脸都有某种眼睛、鼻子(可选)和嘴巴。
  2. 或者,如果您想匹配该列表中的每一个笑脸(而不是其他),您可以只获取这些笑脸,转义任何正则表达式特定的特殊字符,然后与这些字符建立一个巨大的分离。

这里有一些代码可以帮助您开始使用这两种方法:

# approach 1: pattern for "generic smiley"
eyes, noses, mouths = r":;8BX=", r"-~'^", r")(/\|DP"
pattern1 = "[%s][%s]?[%s]" % tuple(map(re.escape, [eyes, noses, mouths]))

# approach 2: disjunction of a list of smileys
smileys = """:-) :) :o) :] :3 :c) :> =] 8) =) :} :^) 
             :D 8-D 8D x-D xD X-D XD =-D =D =-3 =3 B^D""".split()
pattern2 = "|".join(map(re.escape, smileys))

text = "bla bla bla :-/ more text 8^P and another smiley =-D even more text"
print re.findall(pattern1, text)

这两种方法都有优点、缺点和一些普遍的局限性。你总会有误报,就像18^P 这样的数学术语。在表达式周围放置空格可能会有所帮助,但是您无法匹配笑脸后跟标点符号。第一种方法更强大,可以捕捉笑脸,第二种方法不匹配,但只要它们遵循特定的模式。您可以对“东方”笑脸使用相同的方法,但它不适用于严格对称的笑脸,例如=^_^=,因为这不是常规语言。另一方面,第二种方法更容易扩展新的笑脸,因为您只需将它们添加到列表中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    • 2018-08-09
    • 2013-01-12
    • 1970-01-01
    相关资源
    最近更新 更多