【问题标题】:Removing Word but not Subword from a Sentence in Python从 Python 中的句子中删除单词而不是子词
【发布时间】:2019-06-24 08:49:51
【问题描述】:

我需要从 Python 中的句子(给定字符串)中删除给定的单词向量。

问题是我想删除确切的单词而不是子字符串或子词。

注意:我不能假设单词前后有空格

我尝试了.replace(word,"") 功能但不起作用

示例:s = "I'am at home and i will work by webcam call"

当我做s.replace("am","")

输出:i' at home and i will work by webc call

也许可以帮助标记化?

【问题讨论】:

标签: python string machine-learning nlp recurrent-neural-network


【解决方案1】:

您可以使用正则表达式到re.sub 与字边界\b 字符:

>>> import re
>>> s = "I'am at home and i will work by webcam call"
>>> re.sub(r"\bam\b", "", s)
"I' at home and i will work by webcam call"

对于单词列表,您可以使用循环,或使用| 从多个单词中分离,例如"am|and|i"。可选择使用re.I 标志来忽略大写/小写:

>>> words = ["am", "and", "i"]
>>> re.sub(r"\b(%s)\b" % "|".join(words), "", s, flags=re.I)
"' at home   will work by webcam call"

【讨论】:

  • This answer 对上述问题给出了针对 OP 问题的准确而直接的解决方案,基本上归结为re.split('\W+', "Don't answer duplicates, please")
  • @ayorgo 不是。我扫描了“骗子”上的答案,但没有人真正做到了 OP 想要的。例如。您链接到的那个(确实类似于\b\W)将丢弃任何标点符号。
  • Tbh 目前尚不完全清楚 OP 究竟需要什么,但考虑到标签 machine-learningnlprecurrent-neural-network,似乎有一个用于输出的单词列表就足够了。
【解决方案2】:

你可以像这样使用列表推导:

sentence_filtered = " ".join([word for word in sentence.split() if word.lower() not in vector_of_words])

【讨论】:

  • "注意:我不能假设单词前后有空格"
  • 之前或之后。我认为这意味着开始(之前没有空格)或结束(之后没有空格)单词。 OP可以澄清一下。
  • 这有什么不同?重点是,split 不会将 ami'am 拆分,因此它不适用于提供的示例。
  • "我想完全删除单词,而不是子字符串或子词。" ami'am 的子字符串。如果 OP 提供“预期结果”会更有帮助。
  • i'am 可能是一个不好的例子,因为您可能会争论这是一个词还是两个词,但我认为很明显 OP 也希望删除例如后跟标点符号,如逗号或引号。
猜你喜欢
  • 2021-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多