java - 如何判断一个字符串是随机生成的还是似是而非的英文单词?

标签 java text data-mining text-mining

我有一个包含一些字符串的文本语料库。这些字符串中,有的是英文单词,有的是随机的,比如VmsVKmGMY6eQE4eMI,每个字符串的字符数没有限制。

有什么方法可以判断一个字符串是不是英文单词?我正在寻找某种可以完成这项工作的算法。这是在 Java 中,我宁愿不实现额外的字典。

最佳答案

我必须为一个源代码挖掘项目解决一个密切相关的问题,虽然这个包是用 Python 而不是 Java 编写的,但在这里似乎值得一提,以防它仍然有用。包裹是Nostril (对于“Nonsense String Evaluator”),它旨在确定在源代码挖掘过程中提取的字符串是否可能是类/函数/变量/等。标识符或随机乱码。 Nostril 不使用字典,但它包含一个相当大的 n-gram 频率表来支持它对文本字符串的概率评估。

例子:如下代码,

from nostril import nonsense
real_test = ['bunchofwords', 'getint', 'xywinlist', 'ioFlXFndrInfo',
             'DMEcalPreshowerDigis', 'httpredaksikatakamiwordpresscom']
junk_test = ['faiwtlwexu', 'asfgtqwafazfyiur', 'zxcvbnmlkjhgfdsaqwerty']
for s in real_test + junk_test:
    print('{}: {}'.format(s, 'nonsense' if nonsense(s) else 'real'))

将产生以下输出:

bunchofwords: real
getint: real
xywinlist: real
ioFlXFndrInfo: real
DMEcalPreshowerDigis: real
httpredaksikatakamiwordpresscom: real
faiwtlwexu: nonsense
asfgtqwafazfyiur: nonsense
zxcvbnmlkjhgfdsaqwerty: nonsense

项目在GitHub我欢迎贡献。如果你真的需要一个 Java 实现,也许我们可以让 Nostril 兼容 Python 2.7,你可以尝试使用 Jython从 Java 运行它。

关于java - 如何判断一个字符串是随机生成的还是似是而非的英文单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21715354/

相关文章:

java - 如何恢复联系方式?

java - 如何在 Java 中添加 UTF-8 BOM?

html - 如何以文本为背景制作新行?

java - 计算项目的出现次数

java - Jackson:如何将列表反序列化为字段的值

java - 静态ArrayList - 填充增强循环

c++ - 使用 winapi 的可变字体/格式的文本换行 block

html - Qt:如何以纯文本格式打开 Html 文件?

machine-learning - 新手: where to start given a problem to predict future success or not

ssas - 数据挖掘中的案例和嵌套表