我正在研究一种能够在推文流中检测主题的系统/算法。
我要做的是删除停用词,表情符号,网址等,我正在考虑如下表示推文:
terms = (t1, t2, ..., tk)
hashtags = (h1, h2, ..., hn)
date = date of tweet
然后在应用某些聚类算法时,在推文之间使用一些相似性度量,将这3个值组合在一起。这将比这复杂一点,因为我会处理回复(例如,当你回复一些推文时,大多数时候你一直在谈论相同的主题,等等。)
我不知道这是否有效,但我目前看到的问题是我没有确定 n-gram ,所以 Barack Obama 大部分时间都出现在一起,在我的系统中,它将是两个单独的术语( Barack 和 Obama )。
我的问题是:
我怎样才能代表bi-gram?我的意思是,它通常是如何建模的?
我想过有类似的东西:
Tweet = `Some words here`
terms = `[some, words, here, some words, words here]`
...
但是我不知道这是否是正确的方法,如果我必须为每个可能的二元组等做到这一点。
修改:
在我的数据库中,我将存储所有条款。我是否还应该将二元组存储为条款?
答案 0 :(得分:3)
让我们说你的一个文件是“快速的棕色狐狸跳过懒狗”。
bi-gram和uni-gram将是:the_quick
quick_brown
brown_fox
fox_jumped
jumped_over
over_the
the_lazy
lazy_dog
the
quick
brown
fox
jumped
over
lazy
dog
然后,您可以将所有文档的所有唯一克数放在单词向量中进行分析,如下所示:
Document the_quick quick_brown ... lazy dog some_other_gram
1 0.01 0.02 0.1 0.05 0.0
2 0 0 0.12 0.0 0.1
3 0.5 0.4 0 0 0
其中单元格中的数字表示文档中术语的计数,二进制计数,频率或TFIDF分数。
然后,您可以比较文档的相似性,或对它们进行聚类或分类。