问题标签 [document-classification]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2241 浏览

mysql - SQL分类

我有一个系统可以跟踪用户查看的文档。每个文档都有它的 ID 和它所属的集群。我的系统会跟踪会话 ID 和查看次数。我现在想构建一个 SQL 查询,它会给我两列——会话 ID 和分类集群。分类算法很简单:

表结构如下,我使用的是 MySQL 5.5.16:

会议

会话文档

集群文档

所以基本上,我想为每个会话选择集群,计算查看文档的每个集群的出现次数并找到最大出现次数。然后出现最多的集群的 ID 是会话的结果,因此最终结果集包含会话 ID 和出现次数最多的集群:

结果

我设法使用以下查询获取每个会话的已查看文档集群(步骤 2/II。):

我很难弄清楚其余的。这甚至可以使用嵌套的 SELECT 查询吗?我应该使用光标,如果是的话,有人可以用光标显示一个例子吗?任何帮助都感激不尽。

编辑 #1:添加了 C# 实现、MySQL 转储和预期结果

C# 实现

表结构、测试数据和预期结果

表结构和测试数据

预期结果

编辑#2:添加了一个较小的数据集和进一步的算法演练

这是一个较小的数据集:

会议

SESSION_DOCUMENT

CLUSTER_DOCUMENT

算法详解

第 1 步:获取会话查看的文档的集群

第 2 步:计算集群的出现次数

第 3 步(最终结果):找到每个会话的最大发生集群(见上文)并构建最终结果集(session_id,cluster_id):

编辑#3:接受的答案说明

两个给出的答案都是正确的。它们都为问题提供了解决方案。我给了 Mosty Mostacho 接受的答案,因为他首先提供了解决方案,并提供了另一个版本的解决方案,带有VIEW. mankuTimma 的解决方案与 Mosty Mostacho 的解决方案质量相同。因此,我们有两个同样好的解决方案,我选择了莫斯蒂·莫斯塔乔,因为他是第一个。

感谢他们俩的贡献。.

0 投票
1 回答
2306 浏览

weka - Classification with Weka+ NaiveBayes Classifier+ Text classification

I'm using Weka for text classification task. I created my data.arff File. It contains two attributes:

  1. text attribute
  2. class attribute

Then, the generated ARFF file is processed with the StringToWordVector:

java weka.filters.unsupervised.attribute.StringToWordVector -i data/weather.arff -o data/out.arff Then, NaiveBayes is used: java weka.classifiers.bayes.NaiveBayes -t data/out.arff -K

I have this problem:

weka.core.UnsupportedAttributeTypeException: weka.classifiers.bayes.NaiveBayes: Cannot handle numeric class! at weka.core.Capabilities.test(Capabilities.java:954) at weka.core.Capabilities.test(Capabilities.java:1110) at weka.core.Capabilities.test(Capabilities.java:1023) at weka.core.Capabilities.testWithFail(Capabilities.java:1302) at weka.classifiers.bayes.NaiveBayes.buildClassifier(NaiveBayes.java:213) at weka.classifiers.Evaluation.evaluateModel(Evaluation.java:1076) at weka.classifiers.Classifier.runClassifier(Classifier.java:312) at weka.classifiers.bayes.NaiveBayes.main(NaiveBayes.java:944) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at weka.gui.SimpleCLIPanel$ClassRunner.run(SimpleCLIPanel.java:265)

Could anyone help me? I'm stuck at this level.

0 投票
1 回答
692 浏览

user-interface - 在 Weka 的 GUI 下 NaiveBayes 的奇怪结果

我正在使用 Weka 的 GUI 对文本文档进行分类。我的数据集是 .arff 格式。

我应用 StringToWordVector 过滤器。然后,我应用 RemovePercentage 过滤器将我的数据集划分为训练集和测试集。它总共包含 99 个实例和 934 个属性。训练-测试拆分后,训练集包含 66 个实例,测试集包含 33 个实例。

我在训练集中学习模型:结果是 100% 作为准确率然后,我测试在测试集上学习的模型:结果是 3.0303 %。

谁能帮我理解为什么我得到 3.0303 % 以及如何改进这个结果?

0 投票
1 回答
1129 浏览

java - 使用 weka 进行文本分类

我正在使用 Weka 库在 java 中构建一个文本分类器。

首先我删除停用词,然后我使用词干分析器(例如将汽车转换为汽车)。现在我有 6 个预定义的类别。我在每个类别的 5 个文档上训练分类器。文件的长度相似。

当要分类的文本很短时,结果还可以。但是当文本超过 100 字时,结果变得越来越陌生。

我返回每个类别的概率如下:概率:

[0.0015560238056109177, 0.1808919321002592, 0.6657404531908249, 0.004793498469427115, 0.13253647895234325, 0.01448161348153481]

这是一个非常可靠的分类。

但是当我使用超过 100 个单词的文本时,我会得到如下结果:

概率:[1.2863123678314889E-5, 4.3728547754744305E-5, 0.9964710903856974, 5.539960514402068E-5, 0.002993481218084141, 4.23437119E-5]-4

这太好了。

现在我使用朴素贝叶斯多项式对文档进行分类。我已经阅读了它,发现我可以在较长的文本上表现得奇怪。可能是我现在的问题?

任何人都知道为什么会这样?

0 投票
1 回答
587 浏览

machine-learning - Test cases in Weka

Given that I may have an ARFF file that is written in the following form:

And I were to run this to train a Naive Bayes Classifier on Weka. How would I create a test-set so that this trained classifier would be able to make predictions? Thanks.

0 投票
3 回答
16373 浏览

java - Java中使用Weka的基本文本分类

我正在尝试使用 Weka 在 JAVA 中构建文本分类器。我已经阅读了一些教程,并且正在尝试构建自己的分类器。

我有以下类别:

以及以下已经训练好的数据

因此,例如,如果用户想要对 java 一词进行分类,它应该返回类别计算机(毫无疑问,java 只存在于该类别中!)。

它确实可以编译,但会产生奇怪的输出。

输出是:

但是要分类的第一个文本是 java 并且它只出现在计算机类别中,因此它应该是

而另一个根本不应该被发现,所以它应该被归类为未知

这是代码:

顺便说一句,找到了一个很好的页面:

http://www.hakank.org/weka/TextClassifierApplet3.html

0 投票
1 回答
435 浏览

weka - Weka 实验环境下的朴素贝叶斯运行时

我在 Weka 实验环境下为相同的数据集运行 SMO 和朴素贝叶斯。对于 SMO,我有 116.547 秒的训练集和 19.865 秒的测试集。对于朴素贝叶斯,我有 80.665 秒的训练集和 699.594 秒的测试集。我想知道这些结果是否重要,因为朴素贝叶斯被称为快速分类器。

谁能解释我这些结果?

0 投票
2 回答
1868 浏览

weka - 属性选择+weka+朴素贝叶斯

我想知道以下三种方法中哪种方法最适合执行属性选择:

  1. 使用元分类器
  2. 过滤法
  3. 本机方法,直接使用属性选择类

我使用的分类器是朴素贝叶斯。

谁能指导我找到最佳选择?

0 投票
3 回答
1145 浏览

math - 理解朴素贝叶斯的概率计算

使用朴素贝叶斯文本分类技术,您通常计算训练数据中的单词并计算 p(label | document),其中文档是一串单词?

对于文本分类,为什么我们不能直接计算 P(label | word1, word2, etc) 来预测标签?(即为什么我们需要使用贝叶斯定理)

鉴于文件,我们有完整的数据......似乎应该能够直接计算 p(label and w1 and w2 ) / p(w1 and w2) ?

我意识到训练集不是基本事实。用贝叶斯定理计算能解决这个问题吗?如果是这样,怎么做?你能说明数学是如何工作的吗?

0 投票
3 回答
829 浏览

javascript - 杜威十进分类法的三重下拉菜单

杜威十进分类法 (DDC) 是一种对书籍和文本进行分类的非常有用的方法。所以我试图找到一个实现它的三重下拉菜单。我用许多不同的方式搜索了它,但找不到任何东西。

我很久以前就看到了双下拉菜单和最近的三重下拉菜单,所以我可以自己实现这个。认为我的幸运猜测是,对 javascript 不太了解,我可以花费很多时间来实现它。

因此,我的问题。你知道我在哪里可以找到一个已经为实现 DDC 的下拉菜单制作的 javascript 代码吗?此外,当您选择所有字段时,它不需要重定向到另一个页面,因为它是用于需要其他字段的提交页面。这可能是被黑客入侵的想法。

如果您发布的不是 DDC,而是使用通用十进制分类的一些代码,这也是有效的。只是我更喜欢DDC。

如果我在任何地方都找不到它,我会尝试自己做并发布代码。

它应该以这种方式工作:第一个下拉菜单有以下选项:

  • 计算机科学、信息和一般工作
  • 哲学和心理学
  • 宗教
  • 社会科学
  • 语言
  • 科学(包括数学)
  • 技术与应用科学
  • 艺术和娱乐
  • 文学
  • 历史和地理

如果您选择了“科学”,那么第二个下拉菜单将获取这些值:

  • 科学
  • 数学
  • 天文学和相关科学
  • 物理
  • 化学与相关科学
  • 地球科学
  • 古生物学;古动物学
  • 生命科学
  • 植物
  • 动物科学/动物

假设现在您选择了“物理”,那么第三个下拉菜单将是这样的:

  • 经典力学;固体力学
  • 流体力学; 液体力学
  • 气体力学
  • 声音和相关振动
  • 光和超光现象
  • 电力和电子
  • 磁性
  • 现代物理学

如果您选择了“Heat”,那么下拉菜单的值将是:opt1=5, opt2=3, opt3=6,因为“Heat”对应于 536。

您可以在Wikipedia中查看完整结构。