【发布时间】:2015-07-16 04:48:11
【问题描述】:
我正在遍历许多包含 1000 到 3000 行的 csv 文件,检查每一行是否在 140 个字符的文本中继承了 70000 个关键词之一。我目前的问题是,我的代码运行速度非常慢。我猜是因为很多迭代。我是一个相对较新的程序员,不确定什么是加速的最佳方法。检查一个完整的文件花了 2 个小时,还有很多我需要检查。我目前的逻辑是:将 csv 作为列表列表导入 -> 对于列表中的每个列表,获取第一个元素并搜索 70000 个关键字中的每一个是否被提及。
目前我的代码如下所示:
import re
import csv
def findname(lst_names,text):
for name in lst_names:
name_match = re.search(r'@'+str(name), text)
if name_match:
return name
lst_users = importusr_lst('users.csv') #defined function to import 700000 keywords
lst_successes = []
with open(file, 'rb') as csvfile:
filereader = csv.reader(csvfile, delimiter = ',')
content = []
for row in filereader:
content.append(row)
if len(content)>1:
for row in content:
hit = []
mentioned = findname(lst_names, row[0]) #row[0] is the text of 140 characters
if mentioned:
hit = row[1:7]
hit.append(mentioned)
lst_successes.append(hit)
return lst_successes
输入是包含有关此推文的数据的推文列表。一行包含以下信息:
Tweet_text,Tweet_id,Tweet_date,Tweet_fav_count,Tweet_retweet_count,Replied_to user_id,Replied_to_stats_id,author_name,user_name
一个例子可能是:
“这是一条很棒的推文@username。”,576819939086041089,2015-03-14,18:59:24,0,2,4,jjwniemzok,jjwniemzok
关键字是 Twitter 中的用户名。感谢您的帮助!
【问题讨论】:
-
这看起来像是一个全文搜索引擎的任务,而不是一个嵌套循环。您能提供示例输入和示例关键字吗?
-
输入是包含有关此推文数据的推文列表。一行包含以下信息:[Tweet_text, Tweet_id, Tweet_date, Tweet_fav_count, Tweet_retweet_count, Replied to user(id), Replied to stats(id), author_name, user_name]。一个例子可能是:[“这是一条很棒的推文@Tomalak。” ,576819939086041089, 2015-03-14 18:59:24,0,2,4,jjwniemzok,jjwniemzok] 关键字是 Twitter 中的用户名。这有帮助吗?我需要该行的多个单元格。
-
当您说“为列表中的每个列表获取第一个元素并搜索...”时,这是否意味着您只想针对 csv 文件第一列的每个条目搜索关键字.. 并且这些条目是 140 个字符串?
-
那么每个 Tweet_text 的长度是 140 个字符吗?并且您正在尝试将用户名与推文匹配?
-
是的。第一列是 140 个字符的推文。我想知道该推文中是否提到了众多用户中的一个。