Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Twitter/一般分类训练语料库_Python_Twitter_Machine Learning_Categorization - Fatal编程技术网

Python Twitter/一般分类训练语料库

Python Twitter/一般分类训练语料库,python,twitter,machine-learning,categorization,Python,Twitter,Machine Learning,Categorization,有人知道有什么好的推特分类语料库吗 我正在寻找广泛的类别,如: -运动 -科学/技术 -食物 -健康 -娱乐 -音乐 -游戏 -金融 -教育 -政治 -电视 -宗教 -电机 -冲突 (我认为这几乎涵盖了一切) 有非常好的资源链接,但它们是特定的: 特定于商品和自然资源 看起来是美国报纸的 心血管医学数据 编辑 这非常令人兴奋。我找到了这个。这是你的电话号码。它似乎包含了我要找的东西。 我必须学会如何,然后实施这件事,所以如果它有效的话,我必须回电给你们…主要是成功!虽然这不是一个twitte

有人知道有什么好的推特分类语料库吗

我正在寻找广泛的类别,如:
-运动
-科学/技术
-食物
-健康
-娱乐
-音乐
-游戏
-金融
-教育
-政治
-电视
-宗教
-电机
-冲突

(我认为这几乎涵盖了一切)

有非常好的资源链接,但它们是特定的:

  • 特定于商品和自然资源
  • 看起来是美国报纸的
  • 心血管医学数据
编辑
这非常令人兴奋。我找到了这个。这是你的电话号码。它似乎包含了我要找的东西。
我必须学会如何,然后实施这件事,所以如果它有效的话,我必须回电给你们…

主要是成功!虽然这不是一个twitter优化的培训数据集,但似乎更适合一般的文本分类。
好吧,这比希望的要尴尬得多。首先,

from sklearn.datasets import fetch_rcv1
rcv1 = fetch_rcv1()
创建一个我不知道如何使用的数据集。数据是47236维向量,而不是文本标记,没有明显的或记录的(我可以找到)处理方法。所以我不得不走很长的路

查看下表,您可以下载令牌文件。它们被分成5块:

lyrl2004_tokens_train.dat, 
lyrl2004_tokens_test_pt0.dat, 
lyrl2004_tokens_test_pt1.dat, 
lyrl2004_tokens_test_pt2.dat, 
lyrl2004_tokens_test_pt3.dat, 
一个文件包含所有分类:

rcv1-v2.topics.qrels
作为一个有用的补充说明,对于这样的海量文件,只需查看一点数据就可以了解您正在使用的内容。在linux中,您可以执行
head-5rcv1-v2.topics.qrels
查看分类数据的前5行

这些文件可以通过id链接。因此,我创建了一个包含所有id及其相应文本标记和分类的字典。我之所以使用字典(这是一个相当缓慢的过程,而不是仅仅创建两个包含所有值和错误的列表)来完成此操作,是因为我不知道数据文件是否100%匹配

我的字典看起来像这样:
dTrainingData={'2286':{lsTokens:[…],lsCats:[…]}

然后,我创建了两个numpy数组,一个用于标记,一个用于类别。这些需要首先处理。因此,您可以对模型进行如下训练:

def categorize(sText):
    import numpy as np
    aTokens = np.array([d['lsTokens'] for d in dTrainingData.values()], str)
    lCats = [d['lsCats'] for d in dTrainingData.values()]

    print("creating binary cats")

    from sklearn import preprocessing
    oBinarizer = preprocessing.MultiLabelBinarizer()
    aBinaryCats = oBinarizer.fit_transform(lCats)

    from sklearn.multiclass import OneVsRestClassifier
    from sklearn.feature_extraction.text import TfidfTransformer
    from sklearn.svm import LinearSVC
    from sklearn.feature_extraction.text import CountVectorizer
    from sklearn.pipeline import Pipeline

    oClassifier = Pipeline([
        ('vectorizer', CountVectorizer()),
        ('tfidf', TfidfTransformer()),
        ('clf', OneVsRestClassifier(LinearSVC()))])

    print("fitting data to classifier...")
    oClassifier.fit(aTokens, aBinaryCats)

    aText = np.array([sText])

    aPredicted = oClassifier.predict(aText)
    lAllCats = oBinarizer.inverse_transform(aPredicted)

结果好坏参半。如果你看一下,你会注意到很多类别都是金融类的,而不是我想要的一个很好的均匀分布。所以我确实有很多失误。但是,它创建了一个坚实的基础,并且使用上面突出显示的脚手架,很容易将令牌/类别添加到<代码> DReMatgDebug < /代码>字典中,用于更具体的类别。p> 我找到了另一种更简单的方法。有一个名为的服务,它通过一个非常好的API对您发送的文本进行分类

用我自己的话来说,对于python,这里有一个例子:

import requests

sUrl = "http://api.meaningcloud.com/class-1.1"
sKey = #your key - Need to sign up
sText = #your text of type str that you want categorized.
sModel = "IPTC_en"  #or whatever other model you want to use. 

sPayload = "key={}&txt={}&model={}".format(sKey, sText, sModel)
dHeaders = {'content-type': 'application/x-www-form-urlencoded'}

oResponse = requests.request("POST", sUrl, data=sPayload, headers=dHeaders)

dResponse = json.loads(oResponse.text)

您需要注册才能使用它,并且每秒可以处理2个请求,每月最多可以免费处理40k个请求。你需要付出更多,但我认为这很公平


这是解决方案空间的一个例子,和

实现这一点的一种方法是找到这些类别中的人员列表,并使用Twitter API从该列表中的用户那里读取推文。诚然,并不是所有的推特都能保证关注这个话题,但它会让你更进一步。我认为,不管怎样,任何总是在同一主题上发推的用户都更有可能是垃圾邮件发送者;)