2017-07-25 19 views
0

我试图找到一种方法来使用认知服务来检测一个字符串是否包含一段连贯的文本或只是垃圾。例如:有无论如何使用认知服务来检测一个字符串是否包含单词与只是垃圾转移字符/乱码?

SDF#%#ASFSDS b

VS

大家好,我的名字叫萨姆。

这似乎是不可能做到的。我想通过关键字文本分析来运行文本(这会给我一个关键字ASDSDS(多么有用!)),然后通过必应拼写检查运行该关键字。我不确定在美国发生了什么,但看起来ASFSDS是英语。它真的很...呃..哑巴。

我试过通过一堆服务(如语言检测)运行类似的文本,他们都似乎相信我的乱码样本是100%连贯的英语。

我打算在星期五去测验一个MS代表的问题,但我想知道是否有人用Cognitive服务实现了这样的效果?

回答

1

而不是一个二进制is-word-or-not问题,你可能会考虑的是一个词是胡言乱语的概率。然后,您可以选择一个您喜欢的阈值。

对于计算单词probalities,你可以试试网页语言模型API。作为一个例子,你可以看看联合概率。为了您的组词,响应如下所示(为body语料库值):

{ 
    "results": [ 
    { 
     "words": "sdf#%#", 
     "probability": -12.215 
    }, 
    { 
     "words": "asfsds", 
     "probability": -12.215 
    }, 
    { 
     "words": "b", 
     "probability": -3.127 
    }, 
    { 
     "words": "hi", 
     "probability": -3.905 
    }, 
    { 
     "words": "my", 
     "probability": -2.528 
    }, 
    { 
     "words": "name", 
     "probability": -3.128 
    }, 
    { 
     "words": "is", 
     "probability": -2.201 
    }, 
    { 
     "words": "sam.", 
     "probability": -12.215 
    }, 
    { 
     "words": "sam", 
     "probability": -4.431 
    } 
    ] 
} 

你会注意到有几个特质的:

  1. 概率为负。这是因为它们是对数的。
  2. 所有术语都是大小写合并的。这意味着语料库不会将 区分出来,比如GOAT和山羊。
  3. 来电必须为EN-US市场进行 一定量的正常化自己(的 sam.注概率VS sam
  4. 语料库才可用。根据您的使用情况,这可能会产生问题 。

一种先进的使用情况下,将计算条件概率,在单词的上下文中它前面一个字的即概率。

+0

谢谢cthrash。这看起来很有希望。你有没有关于规范文本的最佳方法的提示?我认为只有英文版我才能删除任何不是[A-Za-z]的东西。但是,如果/当他们增加对更多语言的支持时,这种方法不会很好地工作(或根本不工作)。 – Sam

+0

我不知道WebLM的标记化是否公开。例如,您不希望将所有非字母数字的字符都去掉,特别是如果您想标记“good#%&'为非字词。现在可以保持简单,比如说,删除任何标点符号,然后是空格。 – cthrash

相关问题