我通过在线课程学习了几个月的Python,并希望通过一个真实的迷你项目来进一步学习.
对于这个项目,我想从twitter流API收集推文并以json格式存储它们(虽然你可以选择保存关键信息,如status.text,status.id,我被告知最好的方法这样做是为了保存所有数据并在之后进行处理.但是,通过添加on_data(),代码就不再起作用了.有人能帮忙吗?我也对有关存储/处理推文的最佳方式的建议持开放态度!我的最终目标是能够根据人口统计变量(例如,国家/地区,用户资料年龄等)以及特定品牌(例如,Apple,HTC,Samsung)的情绪来跟踪推文.
此外,我还想尝试按位置和关键字过滤推文.我已经改编了如何将位置过滤器分别添加到tweepy模块中的代码.但是,虽然它在有少量关键字时有效,但在关键字数量增加时会停止.我认为我的代码效率低下.有没有更好的方法呢?
### code to save tweets in json###
import sys
import tweepy
import json
consumer_key=" "
consumer_secret=" "
access_key = " "
access_secret = " "
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_key, access_secret)
api = tweepy.API(auth)
file = open('today.txt', 'a')
class CustomStreamListener(tweepy.StreamListener):
def on_status(self, status):
print status.text
def on_data(self, data):
json_data = json.loads(data)
file.write(str(json_data))
def on_error(self, status_code):
print >> sys.stderr, 'Encountered error with status code:', status_code
return True # Don't kill the stream
def on_timeout(self): …Run Code Online (Sandbox Code Playgroud) 我有一个python脚本,可以将与跟踪关键字相关的推文连续存储到文件中.但是,由于下面附加了错误,脚本会反复崩溃.如何编辑脚本以便自动重新启动?我见过很多解决方案,包括这个(异常后重启程序),但我不知道如何在我的脚本中实现它.
import sys
import tweepy
import json
import os
consumer_key=""
consumer_secret=""
access_key = ""
access_secret = ""
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_key, access_secret)
api = tweepy.API(auth)
# directory that you want to save the json file
os.chdir("C:\Users\json_files")
# name of json file you want to create/open and append json to
save_file = open("12may.json", 'a')
class CustomStreamListener(tweepy.StreamListener):
def __init__(self, api):
self.api = api
super(tweepy.StreamListener, self).__init__()
# self.list_of_tweets = []
def on_data(self, tweet):
print tweet
save_file.write(str(tweet))
def on_error(self, status_code):
print …Run Code Online (Sandbox Code Playgroud) 当计算平均值 x最近邻时,Sklearn-KNN允许设置权重(例如,均匀,距离)。
相反,与预测的平均值,是否有可能与预测值(或许还有一个用户定义的函数)?
Elasticsearch 的“more_like_this”查询允许用户根据搜索文档 ID 查找相似文档。
我有一个查询,要查找与特定字段(即标题、品牌、类别名称)上的搜索文档相似的文档。
es.search(index=INDEX_NAME, body = {'query': {
"more_like_this" : {
"fields" : ['title', 'brand', 'category_name'],
"like" : [
{
"_index" : INDEX_NAME,
"_type" : TYPE_NAME,
"_id" : "8117769"
}
],
"min_term_freq" : 2,
"max_query_terms" : 25
}
}
})
Run Code Online (Sandbox Code Playgroud)
我的印象是,它将搜索文档的标题字段与其他文档标题字段、品牌与品牌、类别名称与类别相匹配。然而,结果似乎表明并非如此。相反,它似乎结合了搜索文档标题、品牌和类别字段中的文本,然后从中进行搜索。
有没有办法限制像这样的查询来匹配字段与字段,而不是组合字段并匹配所有字段?
对 more like this 行为的更多理解来自:Elasticsearch "More Like This" API vs. more_like_this query
更像这个 api 更进一步,允许提供文档的 id 以及字段列表。这些字段的内容将从该特定文档中提取,并用于对相同字段进行更像此的查询。这意味着生成的更像此查询的属性文本将包含先前提取的文本,并将在相同的字段上执行。正如您所看到的,more like this api 在后台执行更像此查询。
Elasticsearch允许通过其“更多类似”(MLT)查询来搜索相似文档。我试图更好地理解和调整查询以更好地找到相似的文档。
在进行实验时,我发现来自多个字段的单个MLT查询的结果与每个字段一个的多个MLT查询的布尔值产生不同的结果。以下示例(被截断):
具有多个字段的单个MLT查询
es.search(index=INDEX_NAME, body = {'query': {
"more_like_this" : {
"fields" : ['title', 'category_name', 'brand'],
"like" : []
}
}
})
Run Code Online (Sandbox Code Playgroud)
具有单个字段的多个MLT查询
es.search(index=INDEX_NAME, body = {'query': {
'bool': {
'should': [
{'more_like_this' : {
'fields' : ['title'],
'like' : [],
}},
{'more_like_this' : {
'fields' : ['category_name'],
'like' : [],
}},
{'more_like_this' : {
'fields' : ['brand'],
'like' : [],
}},
]
}
}
})
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
我知道MLT查询将合并单个查询中列出的所有字段中的文本以搜索文档。但是,标题,类别名称和品牌字段中的文本没有重叠。因此,结果应相同。但是,结果却有所不同-多个MLT查询的效果更好。
如果这个问题没有直接的解决方法,我深表歉意。我希望弹性专家对如何改进返回的查询有更多的了解。
如果有时间,这是我在MLT上发布的上一个问题,但仍未得到解答:Elasticsearch特定于字段的“ more_like_this”查询