我有很多包含旅行信息的电子表格,还有其他一些信息。
我需要从描述旅行的行中提取起始和结束位置,以及行中的一两个其他信息,但这些额外字段是什么并不重要。
没有已知的所有位置列表,也没有固定的文本模式,我能寻找的只有位置名称。
我正在搜索的字段中包含0到2个位置,有时位置有别名。
问题
如果我们有以下内容:
00229 | 445 | RTF | Jan | trn_rtn_co | Chicago to Base1 00228 | 445 | RTF | Jan | train | Metroline to home coming from Base100228 | 445 | RTF | Jan | train_s | Standard train journey to Friends
我想要的可能是这样的(虽然具体情况会有所不同):
RTF|Jan|Chicago |Base1RTF|Jan|Home |Base1RTF|Jan|NULL |Friends
然后继续查找Base1
和Friends
对那个人(其唯一ID是RTF)意味着什么,并用合理的位置替换它们(假设他们只有一组‘朋友’):
RTF|Jan|Chicago |RockfordRTF|Jan|Home |RockwordRTF|Jan|NULL |Milwaukee
我的需求
我需要一种方法从最后一列中提取关键词,例如:Metroline to home coming from Base1。
我寻找的词有三种类型:
- 家庭位置
这些是已知且有限的,我可以从列表中获取这些信息 - 家庭别名
这些是已知且有限的,我可以从列表中获取这些信息 - 外出位置
这些是未知的,但它们是英国的城市/城镇等,我不知道如何在字符串中识别这些。这是我的主要问题
我的想法
我想到的首选程序是awk
,但我不知道是否能可靠地搜索到位置名称的专有名词(即位置)。
是否有标准位置的包、库或字典?
我能否让程序扫描电子表格并‘学习’位置名称?
这似乎是一个已经解决的问题(即在文本字符串中查找词),但我不确定我在做什么,而且我只是一个初级程序员。
任何关于我能做些什么的帮助都将不胜感激。
编辑:
任何像“US_Locations_Cities是你可以检查的对象”,“在awk中使用…检查文件中提到的字符串”,“有语言X的库可以让程序学习识别位置名称,它不是RegEx,但可能有效”或“这里有位置名称的字典这里”这样的回答都可以。
最终,任何能帮助我实现目标(即获取位置名称!)的东西都将非常好。
回答:
很遗憾地告诉你,我认为这不是100%可编程的。最好的方法是定义一些标准搜索:
-
Chicago to Base1
[WORD] to [WORD]:
其中“to”是固定的,你寻找前后各有一个词。前面的词是你的来源,后面的词是你的目标 -
Metroline to home coming from Base1
[WORD] to [WORD] coming from [WORD]:
其中“to”和“coming from”是固定的,你寻找三个词在适当的位置。 -
等等
如果你能匹配来源和目标 -> 好的
如果你不能匹配某些东西,那么为那行抛出一个错误,让用户决定,或者更好的是实现适当的纠正,让程序自动重新评估那行。
这些是非平凡的目标。考虑以下几点:
- 美国以外的城市
- 非英语文本条目
- 缩写
对于自动错误纠正,尝试将找到的[WORD]与美国或其他城市的列表进行匹配。如果没有找到城市,则抛出错误。如果你发现错误,要么将未找到的城市添加到你的城市列表中,要么将城市名称翻译成一个公开已知(官方)的名称。