【问题标题】:Finding occurrences of words in text which are in a list words [duplicate]查找文本中单词列表中单词的出现[重复]
【发布时间】:2012-12-14 18:30:21
【问题描述】:

可能重复:
Check if multiple strings exist in another string

假设我有一个允许的单词/短语列表:

'Stack'
'Overflow'
'Stack Overflow'
'Stack Exchange'
'Exchange'

以及以下要解析的文本:

'Hello, and welcome to Stack Overflow. 
 Here are some words which should match: Stack, Exchange.'

我想获取在允许列表中找到的单词列表:

  • '堆栈溢出'
  • '堆栈'
  • '交换'

实现结果的最佳方法是什么?

我将使用的允许列表可能至少有一千个单词/短语。

【问题讨论】:

  • 似乎这个来自另一个问题的答案有一些有趣的指针:stackoverflow.com/a/3261300/89391
  • 你知道一个短语中最多的单词数是多少吗?
  • 谢谢大家。我将尝试可能的解决方案,尽管在 Python 中重新实现 grep 听起来有点令人生畏。 @SamMussmann 如果您所说的短语是指列表中的单词/短语,那么它们最多为 4 个单词,大多数为 1-2 个单词。

标签: python nlp


【解决方案1】:

将单词放在列表中并在使用后

def intersect(x, y):
    return list(set(x) & set(y))
word_list_text=string.split(text)
words_found={}
words_found=intersect(word_list_text, words)

【讨论】:

  • 此解决方案将找不到包含空格的单词,例如 `Stack Overflow"
【解决方案2】:

让单词成为您要搜索的单词列表和段落(给定段落的信息) 你想在哪里搜索单词

for i in words:
    if i in paragraph:
        print i

此代码适用于您问题中的段落和单词,但请注意,如果我们有 stackoverflow 而没有堆栈(单独),此代码将打印堆栈,这既是优点也是缺点,取决于您的目的, 如果您想将其用于单个单词,请使用此

y=paragraph.split()
for i in words:
    if i in y:
        print i

【讨论】:

  • 您不应该使用in 而不是__contains__ 吗? in 会在后台调用 __contains__,而且更惯用。
【解决方案3】:

如果你有以下短语:

phrases = ['Stack','Overflow','Stack Overflow','Stack Exchange','Exchange']

然后文本为:

text = """Hello, and welcome to Stack Overflow. 
Here are some words which should match:Stack, Exchange."""

然后可以做到以下几点:

found_words = [word for word in phrases if word in text]

如果它们不在文本中,这将消除其他短语。虽然除了指定的之外,这也会溢出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-02
    • 2012-10-01
    • 2021-06-03
    • 1970-01-01
    • 2012-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多