如何分析 Java 中的字符串以判断它是一个单词还是完全乱码?
How to analyze a String in Java in order to tell if it is a word or total gibberish?
我需要分析 Java 中的字符串,以判断它是否包含乱码。
例如:
"asdasx123ax" - 胡言乱语
"dsjkklcq" - 胡言乱语
“12das”——胡言乱语
"samarta" - 不是乱码(请注意,它不一定是字典中的真实单词才能被视为 "not gibberish")
"karatko" - 不是乱码
基本上我要分析域名,我想要的算法可以给我一个特定域名是 spammy/robust/gibberish 域名的概率。
所以我更多地关注键盘混搭或类似猫的输入乱码。
P.S。我专注于英语语言。我会对不是 100% 精确的算法感到满意,如果它有时会出错,如果成功检测到乱码的概率(我上面定义的)> 0.6,我会认为它是满足我需要的可行算法。
也许 Java 中有库或算法可以解决这个问题?
对于英语,我是这样计算每个词的可信度得分的:
- 合理的vowel/consonant比率奖励积分
- 出现数字扣分
- 存在常用字母组合的奖励积分("ee"、"oo"、"ey"、"th"、"ch"、"sh" , "qu")
- 扣除常见键盘组合的分数("asdf"、"qwer"、"q" 后跟 "u" 以外的任何内容)等等。
然后我会得到一长串单词并对其进行微调。
既然你想把英语和胡言乱语区分开来;尝试使用某种形式的 approximate string matching 算法将单词与英语词典匹配。
您还可以提出一些关于单词结构的规则,例如,连续出现过多的辅音或元音将是乱码。
如果您有足够 "annotated" 数据,您可以使用某种监督机器学习方法,例如支持向量机(Java 实现:LIBSVM),已知其在文本分类任务中表现良好。
我会尝试
- 收集数据并对其进行注释
- 基于 n-gram 特征训练 SVM
- (可能优化SVM模型)
- 使用训练好的SVM检测"gibberish"和"not gibberish"(二分类)
我需要分析 Java 中的字符串,以判断它是否包含乱码。
例如: "asdasx123ax" - 胡言乱语 "dsjkklcq" - 胡言乱语 “12das”——胡言乱语 "samarta" - 不是乱码(请注意,它不一定是字典中的真实单词才能被视为 "not gibberish") "karatko" - 不是乱码
基本上我要分析域名,我想要的算法可以给我一个特定域名是 spammy/robust/gibberish 域名的概率。
所以我更多地关注键盘混搭或类似猫的输入乱码。
P.S。我专注于英语语言。我会对不是 100% 精确的算法感到满意,如果它有时会出错,如果成功检测到乱码的概率(我上面定义的)> 0.6,我会认为它是满足我需要的可行算法。
也许 Java 中有库或算法可以解决这个问题?
对于英语,我是这样计算每个词的可信度得分的:
- 合理的vowel/consonant比率奖励积分
- 出现数字扣分
- 存在常用字母组合的奖励积分("ee"、"oo"、"ey"、"th"、"ch"、"sh" , "qu")
- 扣除常见键盘组合的分数("asdf"、"qwer"、"q" 后跟 "u" 以外的任何内容)等等。
然后我会得到一长串单词并对其进行微调。
既然你想把英语和胡言乱语区分开来;尝试使用某种形式的 approximate string matching 算法将单词与英语词典匹配。
您还可以提出一些关于单词结构的规则,例如,连续出现过多的辅音或元音将是乱码。
如果您有足够 "annotated" 数据,您可以使用某种监督机器学习方法,例如支持向量机(Java 实现:LIBSVM),已知其在文本分类任务中表现良好。
我会尝试
- 收集数据并对其进行注释
- 基于 n-gram 特征训练 SVM
- (可能优化SVM模型)
- 使用训练好的SVM检测"gibberish"和"not gibberish"(二分类)