Machine learning 如何检查输入字符串是否包含街道地址?
我们要从文档中标识地址字段。为了识别地址字段,我们使用Tesseract将文档转换为OCR文件。从tesseract输出中,我们要检查字符串是否包含地址字段。解决这个问题的正确策略是什么Machine learning 如何检查输入字符串是否包含街道地址?,machine-learning,neural-network,nltk,street-address,text-classification,Machine Learning,Neural Network,Nltk,Street Address,Text Classification,我们要从文档中标识地址字段。为了识别地址字段,我们使用Tesseract将文档转换为OCR文件。从tesseract输出中,我们要检查字符串是否包含地址字段。解决这个问题的正确策略是什么 使用正则表达式无法解决此问题,因为不同文档和国家/地区的地址字段不同 尝试使用NLTK对单词进行分类,但对地址字段的分类效果并不理想 所需输出 I am staying at 234 23 Philadelphia - Contains address files <234 23 Philadelphia
I am staying at 234 23 Philadelphia - Contains address files <234 23 Philadelphia>
I am looking for a place to stay - Not contains address
我住在费城234 23号-包含地址文件
我在找一个住的地方-不包括地址
提供解决此问题的建议 与许多ML问题一样,存在多种可能的解决方案,重要的部分(通常影响更大的部分)不是使用哪种算法或模型,而是特征工程、数据预处理和标准化等。我想到了第一个解决方案(这只是一个想法,我会测试它,看看它的性能如何),它:
然后保留标准的ML工作流…如果您只想检查是或否,而不想提取完整的地址,可以使用一个简单的解决方案 您可以尝试检查文本是否包含位置 例如:
import nltk
def check_location(text):
for chunk in nltk.ne_chunk(nltk.pos_tag(nltk.word_tokenize(text))):
if hasattr(chunk, "label"):
if chunk.label() == "GPE" or chunk.label() == "GSP":
return "True"
return "False"
text="I am staying at 234 23 Philadelphia."
print(text+" - "+check_location(text))
text="I am looking for a place to stay."
print(text+" - "+check_location(text))
输出:
# I am staying at 234 23 Philadelphia. - True
# I am looking for a place to stay. - False
如果你想提取完整的地址,你需要训练你自己的模型
您可以检查:,。为什么说正则表达式不起作用 基本上,以正则表达式的形式定义可能遇到的所有不同形式的地址。然后,只需匹配表达式。你是对的 有些API将尝试为您提取地址。这些API并不总是保证从字符串中提取地址,但它们会尽最大努力。街道地址提取API的一个示例来自SmartyStreets。和 需要考虑的是,即使你的例子(<代码>我停留在234 23费城)不包含一个完整的地址。缺少州或邮政编码字段。这使得以编程方式确定是否存在地址非常困难。一旦有一个州或邮政编码添加到该示例字符串中(
我住在宾夕法尼亚州费城234 23
),就可以通过编程更容易地确定字符串中是否包含地址
免责声明:我为SmartyStreets工作执行此任务的更好方法如下:
SpaCy的
模型或构建您自己的CRF++
/CRF biLSTM
模型,如果您有注释数据)或使用预先培训过的模型,如SpaCy的
大型模型或geopandas等包含所有三个选项的文本的得分为33.33%+33.33%+33.33%=100%
地址字段
,您可以考虑SpaCy的
位置标记(GPE、FAC、LOC等)占文本中总标记的百分比,这可以很好地估计文本中存在多少位置标记。然后运行邮政编码正则表达式,将找到的城市名称与找到的邮政编码前的3-4个单词进行匹配,如果有重叠,则表明您已正确识别了邮政编码,因此有一个地址字段(得到33.33%的分数!)
电话号码
-某些检查和正则表达式可以执行,但重要的标准是,只有当地址字段
位于上述文本中时,它才会执行这些电话检查电子邮件/网址
,您可以再次执行名义正则表达式检查,最后将所有这3个分数相加为一个累积值地址
将得到100分,而缺少的字段将得到66%等。文本的其余部分将得到0分希望有帮助!:) 对于世界上所有的地址字段来说,没有足够的正则表达式,这些地址字段的邮政编码格式与城市名称或缩写不同,在其他国家可能用于其他用途。在这个问题上,只有ML解决方案应该有所帮助。我不认为将城市名称或地点名称矢量化是一个好主意。您使用的BoW模型背后的想法假设您事先知道词汇表,在本例中,没有一个vocab可以拥有所有的城市名称、州名称或邮政编码格式。