這是我想要獲得的結果串列的問題示例。
states = ["Montana", "New York", "Iowa", "Alabama", "Washington DC"] text = "蒙大拿是一個廣闊的天空之國,那里有很多很棒的滑雪場。狂熱的滑雪者會比紐約更喜歡蒙大拿。”
結果 = [蒙大拿州,蒙大拿州,紐約]
我正在查看的一種粗略方法是將兩者相交,但它無法處理重復項和兩個單詞狀態,例如“紐約”。
state_lower = [x.lower() for x in states]
set(state_lower).intersection(text.lower().split())
我正在尋找執行此操作的最快方法,因為每個文本可能很長(4,000 多個單詞),而且我有數百萬個文本要閱讀。另外,我想保留原文中的空格。先感謝您。
uj5u.com熱心網友回復:
尋找執行此操作的最快方法
因此,我建議嘗試flashtext,您需要安裝它,這是以標準方式完成的
pip install flashtext
資料的簡單使用示例
from flashtext import KeywordProcessor
states = ["Montana", "New York", "Iowa", "Alabama", "Washington D.C."]
text = "Montana is big sky country where great ski slopes can be found. Avid skiers will enjoy Montana more than New York."
keyword_processor = KeywordProcessor()
keyword_processor.add_keywords_from_list(states)
result = keyword_processor.extract_keywords(text)
print(result)
輸出
['Montana', 'Montana', 'New York']
如果你想知道 flashtext 是如何作業的,請閱讀Vikash Singh 的 Replace or Retrieve Keywords In Documents at Scale
uj5u.com熱心網友回復:
我認為最簡單的方法是使用精心設計的正則運算式:
import re
regex = '|'.join(map(re.escape, states))
out = re.findall(regex, text)
輸出:['Montana', 'Montana', 'New York']
如果你想計算:
import re
from collections import Counter
regex = '|'.join(map(re.escape, states))
out = Counter((m.group() for m in re.finditer(regex, text)))
print(dict(out))
輸出:
{'Montana': 2, 'New York': 1}
uj5u.com熱心網友回復:
states = ["Montana", "New York", "Iowa", "Alabama", "Washington D.C."]
text = "Montana is big sky country where great ski slopes can be found. Avid skiers will enjoy Montana more than New York."
for x in states:
print(text.count(x),x)
2 Montana
1 New York
0 Iowa
0 Alabama
0 Washington D.C.
uj5u.com熱心網友回復:
只需遍歷狀態串列中的所有字串并將匹配項附加到新串列中。
states = ["Montana", "New York", "Iowa", "Alabama", "Washington D.C."]
text = "Montana is big sky country where great ski slopes can be found. Avid skiers will enjoy Montana more than New York."
for state in states:
if state.lower() in text.lower():
for i in range(text.count(state))
new_list.append(state)
print(new_list)
輸出:
["Montana", "Montana", "New York"]
uj5u.com熱心網友回復:
你可以為它創建一個小函式。
wanted_countries = ['Montana', 'New York', 'Iowa', 'Alabama', 'Washington D.C.']
def filter_non_wanted(my_list):
return_list = list()
for INDEX, i in enumrate(my_list.split(' ')):
if i == 'New' and my_list[INDEX 1] == 'York':
return_list.append('New York')
elif i in wanted_countries:
return_list.append(i)
#-- second possibility, more flexible --#
if ' '.join([i, my_list[INDEX 1]]) in wanted_countries:
return_list.append(' '.join([i, my_list[INDEX 1]]))
elif i in wanted_countries:
return_list.append(i)
return return_list
第二個更“靈活”,因為您可以簡單地添加新if的 like
if ' '.join(list(np.append([i], my_list[from:to 1]))) in wanted_countries:.
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/530875.html
標籤:Python列表文本
