在python中删除csv文件中tweets中不需要的单词(字符)

在python中删除csv文件中tweets中不需要的单词(字符),python,pandas,csv,tweets,Python,Pandas,Csv,Tweets,我有一个csv文件,有60000多条推文。我已在一定程度上清理了文件。但它仍然有一些毫无意义的单词(混合字符可能在URL清理后被遗漏)。我不允许发布任何图片。因此,我发布了文件的一部分。 “”“ 正如您所看到的,一些字符(例如aKk、KNKgFcdxYD、xhQQ)没有任何意义,因此我想删除它们。它们存储在名为[clean_tweet]的列中。 我已经将以下代码缝合在一起用于整个清理目的(从原始推文到我发布的当前版本),但不知道如何删除这些“字符”。我的代码如下。任何建议都将不胜感激。谢谢 im

我有一个csv文件,有60000多条推文。我已在一定程度上清理了文件。但它仍然有一些毫无意义的单词(混合字符可能在URL清理后被遗漏)。我不允许发布任何图片。因此,我发布了文件的一部分。 “”“

正如您所看到的,一些字符(例如aKk、KNKgFcdxYD、xhQQ)没有任何意义,因此我想删除它们。它们存储在名为[clean_tweet]的列中。

我已经将以下代码缝合在一起用于整个清理目的(从原始推文到我发布的当前版本),但不知道如何删除这些“字符”。我的代码如下。任何建议都将不胜感激。谢谢

import re
import pandas as pd 
import numpy as np 
import string
import nltk
from nltk.stem.porter import *
import warnings 
from datetime import datetime as dt

warnings.filterwarnings("ignore", category=DeprecationWarning)

tweets = pd.read_csv(r'myfilepath.csv')
df = pd.DataFrame(tweets, columns = ['date','text'])

df['date'] = pd.to_datetime(df['date']).dt.date #changing date to datetime format from time-series

#removing pattern from tweets

def remove_pattern(input_txt, pattern):
    r = re.findall(pattern, input_txt)
    for i in r:
        input_txt = re.sub(i, '', input_txt)
    return input_txt   

# remove twitter handles (@user)
tweets['clean_tweet'] = np.vectorize(remove_pattern)(tweets['text'], "@[\w]*")
#remove urls    
tweets['clean_tweet'] = np.vectorize(remove_pattern)(tweets['text'], "https?://[A-Za-z./]*")

## remove special characters, numbers, punctuations
tweets['clean_tweet'] = tweets['clean_tweet'].str.replace("[^a-zA-Z#]", " ")
#      
tweets['clean_tweet'] = tweets['clean_tweet'].apply(lambda x: ' '.join([w for w in x.split() if len(w)>2]))  

限定你想要的字符可能比限定你不想要的字符更容易。是否与正则表达式进行负匹配

    if (re.match(r'[A-Za-z0-9@#$%^&*()!-+='";:?', char) is not None) is False:
         replace(char, '')

清理一些类似正则表达式的东西,看看你在寻找什么,然后循环遍历每个字符串的字符。然后,感谢上帝让计算机为你做了所有繁琐的工作!

在我的评论之后,我想如果你使用拼写检查库来检查单词在英语中是否有效,你的任务会变得更容易r不是

类似于以下内容(例如,使用enchant):

导入附魔
从pprint导入pprint
en_us=enchant.Dict(“en_us”)
文本='''
Fintech比特币众筹和网络安全Fintech比特币众筹和网络安全
怪物已离开赢得的satoshi monstercoingame比特币总数
比特币TCH比特币btch
比特币iticoin SPPL BXsAJ
Cointdesk最新比特币价格指数USD pic twitter com aKk
比特币监管趋势ZKDFZ通过CointdeskPIC twitter com KNKgFcdxYD
现在是Mike Tyson比特币应用程序这是Mike Tyson比特币应用程序
比特币打赌正反证据区块链通过
最新比特币价格指数USD pic twitter com CivXlPj
比特币价格指数pic twitter com xhQQ mbRIb
'''
短语=文本。拆分(“\n”)
打印('BEFORE')
pprint(短语)
对于i,枚举中的短语(短语):
短语[i]=''.join(如果是en_us.check(w)),则在短语.split()中用w表示w)
打印('AFTER')
pprint(短语)
上面的代码将产生如下结果:

之前
['',
“Fintech比特币众筹和网络安全Fintech比特币众筹”
"网络安全",,
“怪物已离开赢得的satoshi monstercoingame比特币总额”,
“比特币TCH比特币btch”,
“比特币iticoin SPPL BXsAJ”,
“Cointdesk最新比特币价格指数USD pic twitter com aKk”,
“比特币监管趋势ZKDFZ通过CointdeskPIC推特com KNKgFcdxYD”,
“现在有了Mike Tyson比特币应用程序有了Mike Tyson比特币应用程序”,
“比特币打赌正反证据区块链审计比特币”
"via",,
“最新比特币价格指数USD pic twitter com CivXlPj”,
“比特币价格指数pic twitter com xhQQ mbRIb”,
'']
之后
['',
“比特币和比特币以及”,
“怪物已经离开赢得的比特币总额”,
“比特币比特币”,
“比特币”,
“最新比特币价格指数”,
“通过twitter com进行比特币监管的趋势”,
“现在有了Mike Tyson比特币应用程序Mike Bitcoin应用程序”,
“正反证据通过”审核比特币,
“最新比特币价格指数”,
“比特币价格指数pic twitter com”,
'']
但是,正如您所看到的,
Fintech
crowdfunding
cybersecurity
(列出一些)等词在英语中被标记为无效,因此您需要根据需要对代码进行微调

我希望有帮助

更新:要将单词例外添加到拼写检查器,请执行以下操作:

异常=[
“金融科技”,
“众筹”,
"网络安全",,
“金融科技”,
“众筹”,
"网络安全",,
"佐藤",,
“怪物游戏”,
“TCH”,
“硬币桌”,
“美元”,
“CoinDeskpic”,
“有”,
“泰森”,
“比特币赌”,
“区块链”,
“美元”
]
例外情况中的单词:
#将单词添加到个人词典
#添加(word)
#或者仅为该会话添加单词
en_us.将_添加到_会话(word)

有一种方法可以做到这一点,使用nltk 它还将删除url

url需要先被删除,否则你会被删除,它会从url中删除一些单词,使事情变得更糟

nltk.download('words') # if its needed
words = set(nltk.corpus.words.words())

def clean_tweets(text):
    text= re.sub(r'https.?://[^\s]+[\s]?', '', text)
    return " ".join(w for w in nltk.wordpunct_tokenize(text) \
     if w.lower() in words or not w.isalpha())
这将删除这些废话 范例


这是仅有的三个词吗?欢迎使用!请花一点时间阅读如何发布熊猫问题:
(r'http.?://[^\s]+[\s]?',
和https使用
(r'https.?://[^\s]+[\s]?)
使用这些patterns@AhmedSunny,您的第一个模式也已经匹配了
https
。不需要第二个模式。事实上,第二个模式没有任何意义,因为它将尝试匹配
https
,然后在
之前添加另一个任意字符。例如
httpsa://
。这不是更直观吗如果不重新匹配(r'[A-Za-z0-9@$%^&*()!-+='“;:?”,字符),则具有
的初始值:
?我非常感谢否决投票的原因。因为我在这里发布之前对它进行了测试,并且在这篇文章中效果很好。我不知道否决投票的原因。但是你的代码也会删除所有的hashtaged单词以及特殊字符。只是在另一条推特上尝试过。很抱歉,回复太晚了。我正在尝试其他方法ods也是。拼写检查方法可以在一个小文件上使用。但是,除了60000多条tweets文件外,我的主要csv文件中还有1000多万条tweets。我怀疑是否有可能为数百万条tweets设置例外。如果有人知道如何扩展它,我会保留这个问题。不过谢谢你的回答。好的。不用担心。但是我想你也可以在互联网上的某个地方找到英语新词的列表,并将其作为词典的附录。
nltk.download('words') # if its needed
words = set(nltk.corpus.words.words())

def clean_tweets(text):
    text= re.sub(r'https.?://[^\s]+[\s]?', '', text)
    return " ".join(w for w in nltk.wordpunct_tokenize(text) \
     if w.lower() in words or not w.isalpha())
test = 'this is a  test KNKgFcdxYD to check https://stackoverflow.com/questions/295 xhQQ'
ret = clean_tweets(test)
print(ret)
# output
#this is a test to check