2

我想分析网络调查的答案(如果有兴趣,可以使用 Git User's Survey 2008 )。其中一些问题是自由形式的问题,例如“您是如何听说 Git 的?”。超过 3,000 条回复完全手动分析这些回复是不可能的(尤其是本次调查中有相当多的自由形式问题)。

我如何至少半自动地将这些回复(可能基于响应中使用的关键词)分组(即程序可以要求确认),然后如何将这些回复(每个类别中的条目数)表格化 -表格回复(答案)?一个答案可以属于多个类别,尽管为简单起见,可以假设类别是正交/互斥的。

我想知道的至少是要搜索的关键字,或者要使用的算法(一种方法)。我更喜欢Perl(或 C)中的解决方案。


可能的解决方案 1。(部分):贝叶斯分类

(添加于 2009-05-21)

我想到的一种解决方案是使用算法(及其背后的数学方法)进行贝叶斯垃圾邮件过滤,而不是一两个类别(“垃圾邮件”和“火腿”),会有更多;并且类别本身将自适应/交互地创建。

4

4 回答 4

1

你不会喜欢这个的。但是:如果您进行调查并且包含许多自由形式的问题,那么您最好准备好手动对它们进行分类。如果那是不可能的,那么您为什么首先会提出这些问题?

于 2009-05-20T13:46:50.227 回答
1

文本::Ngrams + 算法::集群

  1. 使用Text::Ngrams为每个答案(例如字数)生成一些向量表示。
  2. 使用Algorithm::Cluster对向量进行聚类以确定分组以及与组对应的关键字。
于 2009-05-20T21:11:02.780 回答
1

过去,我在相当大的语料库中使用过类似的强制方法。Lingua::EN::Tagger,Lingua::Stem::En。此外,Net::Calais API(不幸的是,汤普森路透社并不完全对开源友好)对于从文本中提取命名实体非常有用。当然,一旦你用这些东西清理了原始数据,实际的数据处理取决于你。我倾向于怀疑频率计数和输出的一些机械土耳其人交叉验证足以满足您的需求。

于 2009-05-21T01:26:18.910 回答
0

寻找常用词作为关键字,但不要使用诸如“the”、“a”等无意义的词。之后,您将进入我无法理解的自然语言内容。

我突然意识到,完美的解决方案是 AAI(人工智能)。使用亚马逊的Mechanical Turk。Perl 绑定是Net::Amazon::MechanicalTurk。每个回复一美分,有相当大的重叠(比如每个回复三个人),大约是 90 美元。

于 2009-05-20T13:45:28.717 回答