Python中的文本交集

2024-05-18 18:56:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有“城市”的名单:

US,Upper St. Clair
US,VCT,Victoria,Viktorija,bigtolia,bikutoria,fyktwrya  tksas,wei duo li ya,wyktwrya  tgzas,Виктория,Викторија,فيكتوريا، تكساس,ویکتوریا، تگزاس,ビクトリア,維多利亞,빅토리아
US,VCV,Victorville,Viktorvil,Vikturvil,bhiktarabhila,bigteobil,fyktwrfyly  san byrnardynw  kalyfwrnya,vu~ikutavu~iru,wei ke duo wei er,wyktwr wyl  kalyfrnya,Викторвил,Виктървил,فيكتورفيلي، سان بيرناردينو، كاليفورنيا,وکٹورولے,ویکتور ویل، کالیفرنیا,भिक्टरभिल,ヴィクターヴィル,维克多维尔,빅터빌
US,VIS,Vajsejlija,Vajselija,Visalia,Visejlija,baiseiria,bhisaliya,fysalya  kalyfwrnya,wei sai li ya,wysalya,wysalya  kalyfrnya,Вайселия,Вајсејлија,Висейлия,فيساليا، كاليفورنيا,ویسالیا,ویسالیا، کالیفرنیا,भिसालिया,バイセイリア,維塞利亞
US,VKS,Vicksburgum,Viksberg,Viksburg,bigseubeogeu,vu~ikkusubagu,wei ke si bao,wyksbrg  mysysypy,Виксберг,Виксбург,Виксбърг,ویکسبرگ، میسیسیپی,ヴィックスバーグ,维克斯堡,빅스버그
US,VLD,Valdosta,Валдоста
US,VLO,Val'ekho,Valejo,Valekho,Vallejo,balleio,bhyalejo,falyjw  kalyfwrnya,vu~areho,walhw  kalyfrnya,walyjw,wei li he,Валехо,Валејо,Вальехо,فاليجو، كاليفورنيا,والهو، کالیفرنیا,والیجو

还有一个句子列表,可以包含任何城市的名字。你知道吗

问题是我如何“相交”这两个实体,以便最终得到一个类似 'this particular text''this particular city inside'?你知道吗

Python 2.7版

谢谢你。你知道吗

更新: 输出可以是字典,如:

{
   'Los-Angeles': 'something is going on in Los Angeles',
   'Washington': 'something is happenes in Washington!',
   ...
}

Tags: lithissomethinguskeduoyawei
2条回答

你可以这样做!你知道吗

from collections import defaultdict
from itertools import product
from pprint import pprint

cities = [
    'Copenhagen',
    'Berlin',
    'Stockholm'   
]

sentences = [
    'Hello world',
    'Hello Copenhagen',
    'Hello Berlin',
    'Bye Berlin',
]

res = defaultdict(list)

for city, sentence in product(cities, sentences):
    if city in sentence:
        res[city].append(sentence)

pprint(res)

输出结果:

~ python test.py 
{'Berlin': ['Hello Berlin', 'Bye Berlin'],
 'Copenhagen': ['Hello Copenhagen']}

因此,您必须首先将城市拆分为别名,然后在文本中搜索它们:

all_cities = {}
with open('cities') as cities:
    for city in cities:
        city = city.strip()
        parts = city.split(',')
        all_cities.update((part, parts[:2]) for part in parts[1:]) # skip the "US"

for city in all_cities:
    if city in some_text:
        print all_cities[city]

相关问题 更多 >

    热门问题