LSH - 带状疱疹的二进制矩阵表示

LSH - Binary matrix representation from shingles

我有一个很大的新闻文章数据集,准确地说是 48000 篇。我已经为 n = 3 中的每篇文章制作了 ngram。 我的 ngram 看起来像这样:

[[(tikro, enters, into), (enter, into, research), (into, research, and),...]] 

现在我需要为每个木瓦和物品制作一个二进制矩阵:

          article1 article2 article3
shingle1     1        0        0
shingle2     1        0        1
shingle3     0        1        0

起初我将所有带状疱疹都放在一个列表中。在那之后,我试过这个来检查它是否有效。

for art in article:
    for sh in ngrams:
        if sh in art:
            print('found')

因为一个是设置的,另一个是字符串,所以它不起作用。有什么建议,如何让它发挥作用?或任何其他方法?

谢谢

在搜索文章中的 shingles 之前,您可以使用 join 将 shingle 的单词连接成一个三词短语。

例如,我们有这样的 ngram:

ngrams = [('tikro', 'enters', 'into'),
          ('enter', 'into', 'research'),
          ('into', 'research', 'and')]

然后我们将每个 shingle 的单词连接成短语:

shingles = [' '.join(x) for x in ngrams]

转换后 shingles 类似于:

['tikro enters into', 
 'enter into research', 
 'into research and']

哪些是您可以在文章中搜索的字符串。