使用 Python 文本挖掘车辆识别号 (VIN#) 的大量注释

Text mining a large list of Notes for Vehicle Identification Number (VIN#) with Python

我有一个包含 2 列的保险索赔数据的大型数据集。一列是声明标识符。另一个是索赔附带的一大串注释。

我的目标是通过文本挖掘特定 VIN 号码的索赔说明。 VIN# 通常采用 17 位格式。见下文:https://www.autocheck.com/vehiclehistory/autocheck/en/vinbasics

但是,我的数据出现了一些问题。有时,VIN# 仅输入最后 6 位数字。我基本上需要一种方法来处理我的数据,并抓取任何看起来像 17 位 VIN 号码的东西,并将其 return 到该行数据。我正在使用 Python 3,我是一个菜鸟文本挖掘者,但有一些使用正则表达式的基本经验。

我正在尝试在 python 中创建一个函数,我可以在其中将其 lambda 应用于注释列。

目前尝试次数:

C_Notes['VIN#s'] = C_Notes['ClaimsNotes'].str.findall(r'[0-9]{1}[0-9a-zA-Z]{16}') 

我正在尝试模仿我提供的 link 中的 VIN 格式。

所以寻找具有以下品质的字符串的东西:

编辑:更改了代码片段。如果我用虚构的文本制作了一些 VIN 的玩具示例,但我没有成功地遍历 pandas 列,则此代码示例有效。每个行条目都有一大段文本我希望函数一次遍历每一行。

谢谢。

嗯,您的代码正则表达式不起作用,因为违反了您的具体要求。尝试:

^[0-9][a-zA-Z]{2}[0-9a-zA-Z]{5}[a-zA-Z]{3}[0-9]{6}

但是您确切使用哪个 VIN 系统?

维基百科 article 描述了 17 位 VIN 号,描述了三个不同的系统:ISO 3779、欧洲和北美。

显然没有通用的正式规则规定什么(onlyletter/onlydigit/letterordigit)占据哪个位置。

前 3 个字符取决于制造商 country/region,其中第一个字符是大洋洲和美洲的数字,其他人是字母。

对于北美,第 9、13、14、15、16 和 17 位始终是数字和字母 I,O,Q,从不使用。

考虑到以上考虑,可以使用以下模式:

[0-9][0-9A-Za-z^IiOoQq]{7}[0-9][0-9A-Za-z^IiOoQq]{3}[0-9]{5}

由数字([0-9])和字母或数字组成,但不属于禁止字符。 ^里面的[]表示后面跟着字符黑名单

作为更笼统的说明,我建议不要根据合法字符串的有限子集来猜测正则表达式。