簡體   English   中英

在列表和字符串中查找匹配的單詞

[英]Find matching words in a list and a string

我正在用Python編寫一些代碼,我想檢查一個單詞列表是否在長字符串中。 我知道我可以多次迭代它,這可能是同樣的事情,但我想看看是否有更快的方法來做到這一點。 我目前正在做的是:

    all_text = 'some rather long string'
    if "motorcycle" in all_text or 'bike' in all_text or 'cycle' in all_text or 'dirtbike' in all_text:
        print 'found one of em'

但我想要做的是:

keyword_list = ['motorcycle', 'bike', 'cycle', 'dirtbike']
if item in keyword_list in all_text:
            print 'found one of em'

無論如何有效地做到這一點? 我意識到我能做到:

keyword_list = ['motorcycle', 'bike', 'cycle', 'dirtbike']
for item in keyword_list:
      if item in all_text:
            print 'found one of em'

但是一旦關鍵字列表變長,似乎會有更好的方法。

你仍然必須至少檢查它們,直到找到一個在文本中,但它可以更簡潔:

keyword_list = ['motorcycle', 'bike', 'cycle', 'dirtbike']

if any(word in all_text for word in keyword_list):
    print 'found one of em'

一種方法是從關鍵字列表中構建前綴樹 然后,您可以遍歷每個字符的長字符串字符。 在每次迭代中,您嘗試在前綴樹中找到從當前位置開始的大字符串中的前綴。 此操作需要O(log k)時間,其中關鍵字列表的大小為k(假設前綴樹是平衡的)。 如果長字符串的長度為n,那么總的復雜度就是O(n log k) ,如果k很大,這比天真的O(nk)要好得多。

這個怎么樣。

>>> keyword_list = ['motorcycle', 'bike', 'cycle', 'dirtbike', "long"]
>>> all_text = 'some rather long string'
>>> if set(keyword_list).intersection(all_text.split()):
...     print "Found One"
Found One

你需要使all_text成為一個變量,否則它將不起作用

keyword_list = ['motorcycle', 'bike', 'cycle', 'dirtbike']
all_text = input("what kind of bike do you like?")
for item in keyword_list:
      if item in all_text:
            print ('found one of em')

使用正則表達式可能是快速的方法。

re.findall(r'motorcycle|bike|cycle|dirtbike', text)

將返回所選單詞的所有匹配項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM