从熊猫列中的列表中删除单词-python 2.7

时间:2018-07-20 12:35:43

标签: python regex pandas dataframe nlp

我有一个文本文件,其中包含一些要从数据框中删除的字符串。数据框观察结果包含ext文件中存在的那些文本。

这是文本文件-https://drive.google.com/open?id=1GApPKvA82tx4CDtlOTqe99zKXS3AHiuD

这是链接;数据= https://drive.google.com/open?id=1HJbWTUMfiBV54EEtgSXTcsQLzQT1rFgz

我正在使用以下代码-

import nltk
from nltk.tokenize import word_tokenize 
file = open("D://Users/Shivam/Desktop/rahulB/fliter.txt")
result = file.read()
words = word_tokenize(result)

我加载了文本文件并将其转换为单词/令牌。

这是我的数据框。

text
0   What Fresh Hell Is This? January 31, 2018 ...A...
1   What Fresh Hell Is This? February 27, 2018 My ...
2   What Fresh Hell Is This? March 31, 2018 Trump ...
3   What Fresh Hell Is This? April 29, 2018 Michel...
4   Join Email List Contribute Join AMERICAblog Ac...

如果看到此信息,这些文本将显示在所有行中,例如“这是什么新鲜的地狱?”或“加入电子邮件列表有助于加入Americablog Ac,“登录每日综述MS立法机关当选O”等。

我将此用于循环

for word in words:
    df['text'].replace(word, ' ')

我的错误。

error                                     Traceback (most recent call last)
<ipython-input-168-6e0b8109b76a> in <module>()
----> 1 df['text'] = df['text'].str.replace("|".join(words), " ")

D:\Users\Shivam\Anaconda2\lib\site-packages\pandas\core\strings.pyc in replace(self, pat, repl, n, case, flags)
   1577     def replace(self, pat, repl, n=-1, case=None, flags=0):
   1578         result = str_replace(self._data, pat, repl, n=n, case=case,
-> 1579                              flags=flags)
   1580         return self._wrap_result(result)
   1581 

D:\Users\Shivam\Anaconda2\lib\site-packages\pandas\core\strings.pyc in str_replace(arr, pat, repl, n, case, flags)
    422     if use_re:
    423         n = n if n >= 0 else 0
--> 424         regex = re.compile(pat, flags=flags)
    425         f = lambda x: regex.sub(repl=repl, string=x, count=n)
    426     else:

D:\Users\Shivam\Anaconda2\lib\re.pyc in compile(pattern, flags)
    192 def compile(pattern, flags=0):
    193     "Compile a regular expression pattern, returning a pattern object."
--> 194     return _compile(pattern, flags)
    195 
    196 def purge():

D:\Users\Shivam\Anaconda2\lib\re.pyc in _compile(*key)
    249         p = sre_compile.compile(pattern, flags)
    250     except error, v:
--> 251         raise error, v # invalid expression
    252     if not bypass_cache:
    253         if len(_cache) >= _MAXCACHE:

error: nothing to repeat

3 个答案:

答案 0 :(得分:0)

您可以使用str.replace

例如:

df['text'] = df['text'].str.replace("|".join(words), " ")

答案 1 :(得分:0)

您可以通过以下方式修改代码:

for word in words:
     df['text'] = df['text'].str.replace(word, ' ')

答案 2 :(得分:0)

您可以使用

df['text'] = df['text'].str.replace(r"\s*(?<!\w)(?:{})(?!\w)".format("|".join([re.escape(x) for x in words])), " ")

r"(?<!\w)(?:{})(?!\w)".format("|".join([re.escape(x) for x in words]))行将执行以下步骤:

  • re.escape(x) for x in words]-将安全地与正则表达式一起使用的单词中的所有特殊字符转义
  • "|".join([...)-将创建由正则表达式引擎匹配的替代项
  • r"\s*(?<!\w)(?:{})(?!\w)".format(....)-将创建一个像\s*(?<!\w)(?:word1|word2|wordn)(?!\w)这样的正则表达式,将匹配单词作为列表中的整个单词(\s*还将删除单词之前的0+空格)。