Nlp 消除英语单词中字母重复的正确方法?

Nlp 消除英语单词中字母重复的正确方法?,nlp,sentiment-analysis,linguistics,Nlp,Sentiment Analysis,Linguistics,正如标题清楚描述的那样,我想知道什么是正确的方法来消除社交媒体中常用来夸大这种感觉的英语角色重复。因为我正在开发一个软件解决方案来纠正键入错误的单词,所以我需要一个可以应用于大多数英语单词的全局算法。所以,我要求专家们学习如何在不使用基于学习的方法的情况下消除英语单词中的额外字母 ps.(1)我通过编程检查单词是否有效,是否使用。到目前为止,除了一些例子,例如单词veery,它被定义为褐褐色的北美trush,在WordNet 3.0中以其歌曲而闻名。当在WordNet中找到单词时,我中断字母消除

正如标题清楚描述的那样,我想知道什么是正确的方法来消除社交媒体中常用来夸大这种感觉的英语角色重复。因为我正在开发一个软件解决方案来纠正键入错误的单词,所以我需要一个可以应用于大多数英语单词的全局算法。所以,我要求专家们学习如何在不使用基于学习的方法的情况下消除英语单词中的额外字母

ps.(1)我通过编程检查单词是否有效,是否使用。到目前为止,除了一些例子,例如单词
veery
,它被定义为
褐褐色的北美trush,在WordNet 3.0中以其歌曲
而闻名。当在WordNet中找到单词时,我中断字母消除过程。那么有没有其他的知识库可以代替WordNet呢

附言(2)事实上,我在一次会议上问了这个问题。但他们引导我在这里问这个问题

一些示例:

haappyy --> happy
amaaazzinng --> amazing
veeerry --> very

正如你在例子中看到的,字母重复的位置不同于单词。

< P>一个非正则形式映射到它的规范形式的一个主要问题是它是没有上下文的歧义:例如MeEET——实际上是遇见还是遇见?

解决这一问题的一种方法是测量一个词的“规范性”,即在n-gram模型中给定其上下文(即其前面的词)的概率:被判断为该词(如下所述)的“别名”且给定当前上下文最常见的词被视为“规范”形式:

规范化 可以将veeerry和very等形式视为同一形式的变体,即修改后的“有序字符包”,以便将这两种形式处理为
('v'、'e'、'r'、'y')序列,尽管权重不同:

  • 维埃里:
    ('v',1),('e',3),('r',2),('y',1))
  • 非常:
    ('v',1),('e',1),('r',1),('y',1))
通过这种方式,这些形式可以像正常特征向量一样进行处理-这将用于在下面对其概率进行加权

混叠 如您所述,我们需要能够将例如veeerry映射为very,而无需与不常见的单词匹配。因此,简单地将veeerry表示为一个“有序的字符包”,而不进行任何加权,这意味着veeerry可能是一个变体,但显然不是。然而,由于最有可能的是与副词very的含义非常不同,因此可以根据上下文中的概率获得规范化的
('v','e','r','y')
的含义,例如:

  • 这辆车太大了
  • #这辆车是一辆四轮马车。(“这辆车是一只黄褐色的北美画眉,以它的歌声而闻名”)
  • 即使不考虑这两个例子(第一个是副词,第二个是名词)之间的句法区别,这两个不同单词的原始统计分布也是非常不同的。因此,如果是一款好的车型,
    P(veery|u 1 |“这辆车是”)>P(veery|u 2 |“这辆车是一辆”)

    概率加权 为了将例如veeerry与very关联,以便在文本中找到时对其进行规范化,同时仍然避免将其规范化为very,然后,我们可以简单地使用代表veeerry的有序字符包的特征向量来计算其与两个字符的距离,然后使用该距离来加权给定上下文中每个字符的概率:

    best_term(form, context) = argmax(arg=term, (P(term, context) * sim(ordered_bag_of_chars(form), ordered_bag_of_chars(term)))
    
    为了更好地解释这在现实生活中是如何工作的,我编写了一些Python代码:

    #/usr/bin/env蟒蛇3
    从scipy.spatial.distance导入余弦
    课堂词汇(对象):
    定义初始化(自我,形式):
    self.forms=forms
    self.form_variations={}
    表格中的表格:
    唯一\u符号\u频率=元组(计数\u唯一\u符号\u频率(形式))
    unique\u symbols=元组(unique\u symbol\u freq[0]表示unique\u symbol\u freq中的unique\u symbol\u freq)
    self.form\u变体[唯一符号]=加权符号序列(唯一符号频率)
    类加权SYMBOLSequence(对象):
    定义初始化(自身、唯一符号):
    #TODO:完成实现
    通过
    def计数\唯一\符号\频率(输入顺序):
    如果len(输入顺序)>0:
    #首先处理头部符号
    上一个唯一符号=(输入顺序[0],1)
    #处理尾部符号;在末尾添加额外的迭代,以便处理尾随的单个唯一符号
    tail_iter=iter(输入顺序[1:])
    尝试:
    尽管如此:
    输入符号=下一个(尾部)
    如果输入\u符号==上一个\u唯一\u符号[0]:
    上一个唯一符号=(上一个唯一符号[0],上一个唯一符号[1]+1)
    其他:
    结果\u唯一\u符号=上一个\u唯一\u符号
    上一个\u唯一\u符号=(输入\u符号,1)
    产生结果\u唯一\u符号
    除停止迭代外:
    #遇到序列的结尾;处理可能的最后一个唯一符号
    产生上一个\u唯一\u符号
    如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
    从sys导入stderr
    测试={“haappyy”:“happy”,“amaaazzinng”:“惊奇”,“veeerry”:“非常”}
    以open(“/usr/share/dict/words”,“r”)作为语音输入:
    #TODO:将字符的大写版本别名为小写版本,以便例如“dog”和“dog”非常相似,但不完全相同
    vocab=词汇表(冻结集(vocab_instream中的行的line.strip().lower())
    对于tests.items()中的form1和form2:
    #首先检查标记是否为现存单词
    如果表格1在表格B中:
    打印(“\%s\”可在词汇表中找到;无需查找类似的单词。“%form1)
    其他:
    form1\u unique\u char\u freqs=元组(count\u uniqu