如何找到字符二元组和三元组?

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 如果它回答了您的问题,最好接受它作为答案。

以上是关于如何找到字符二元组和三元组?的主要内容,如果未能解决你的问题,请参考以下文章

《程序员代码面试指南》第八章 数组和矩阵问题 不重复打印排序数组中相加和为给定值的所有二元组和三元组

使用 Gensim 获取三元组的问题

如何实现潜在狄利克雷分配以在主题中给出二元组/三元组而不是一元组

在 LLVM-C API 中确定和设置主机目标三元组和指令扩展

错误:.plugins[3] 只能是二元组或三元组

Python 基础三元组