如何找到字符二元组和三元组?
Posted
技术标签:
【中文标题】如何找到字符二元组和三元组?【英文标题】:How to find character bigrams and trigrams? 【发布时间】:2018-10-04 21:17:58 【问题描述】:问题:
查找域名称的二元组、三元组和二元组分数。我有一个数据集,我想使用一些简单的分类来区分它们是否是 dga 域。所以我想从二元组、三元组和熵开始。
我尝试了什么:
from nltk import ngrams
sentence = 'some big sentence'
n = 2
sixgrams = ngrams(sentence.split(), n)
for grams in sixgrams:
print grams
这里我得到了一个句子的二元组。但我的意图不是这个。
我要转换
示例域:google.co.in
bigrams
[‘$g’, ‘go’, ‘oo’, ‘og’, ‘gl’, ‘le’, ‘e$’, ‘$c’, ‘co’, ‘o$’, ‘$i’, ‘in’, ‘n$’]
trigrams
[‘$go’, ‘goo’, ‘oog’, ‘ogl’, ‘gle’, ‘le$’, ‘$co’, ‘co$’, ‘$in’, ‘in$’]
然后计算bigrams_score。从中我可以使用它来预测模块和分析。
谁能帮我弄清楚如何解决这个问题?
【问题讨论】:
为什么它不适用于sentence = 'google.co.in'
?
返回空集。我已经试过了。
您可能想在您的问题中添加它,对吗? (我必须承认我不知道它为什么会失败。)
我复制了你的代码,对于“这里我得到了一个句子的二元组”,我得到了('some', 'big') ('big', 'sentence')
,它比二元组更多的“双词”。也许ngrams(..)
确实不 将您的输入分成两个字母的部分,而只分成两个word 部分。 (想一想,这可以解释为什么一个单词短语会默默地失败。)编辑哦等等,ngrams(..)
上的类似问题也适用于 words,而不是字母。看来你使用了错误的包。
【参考方案1】:
>>> from nltk import word_tokenize, ngrams
>>> s = "foo bar sentence"
# Word ngrams.
>>> list(ngrams(word_tokenize(s), 2))
[('foo', 'bar'), ('bar', 'sentence')]
# Character ngrams.
>>> list(ngrams(s, 2))
[('f', 'o'), ('o', 'o'), ('o', ' '), (' ', 'b'), ('b', 'a'), ('a', 'r'), ('r', ' '), (' ', 's'), ('s', 'e'), ('e', 'n'), ('n', 't'), ('t', 'e'), ('e', 'n'), ('n', 'c'), ('c', 'e')]
【讨论】:
完美......谢谢。 顺便说一句,from nltk import everygrams; list(everygrams(s, 2, 3))
@SaiKiran 如果它回答了您的问题,最好接受它作为答案。以上是关于如何找到字符二元组和三元组?的主要内容,如果未能解决你的问题,请参考以下文章
《程序员代码面试指南》第八章 数组和矩阵问题 不重复打印排序数组中相加和为给定值的所有二元组和三元组
如何实现潜在狄利克雷分配以在主题中给出二元组/三元组而不是一元组