gpt4 book ai didi

perl - 从字符串中提取格式不一致的日期(日期解析,NLP)

转载 作者:行者123 更新时间:2023-12-04 15:37:36 25 4
gpt4 key购买 nike

我有大量文件,其中一些文件名中嵌入了日期。日期的格式不一致且通常不完整,例如“Aug06”、“Aug2006”、“August 2006”、“08-06”、“01-08-06”、“2006”、“011004”等。除此之外,一些文件名还有一些不相关的数字,看起来有点像日期,例如“20202010”。

简而言之,日期通常不完整,有时不存在,格式不一致,并且嵌入在带有其他信息的字符串中,例如“报告 Aug06.xls”。

是否有任何可用的 Perl 模块可以很好地从这样的字符串中猜测日期?它不一定是 100% 正确的,因为它将由人工手动验证,但我正在努力使该人的事情尽可能简单,并且有数千个条目要检查:)

最佳答案

Date::Parse 肯定会成为您答案的一部分——它可以计算出一个随机格式化的类似日期的字符串,并从中得出一个实际可用的日期。

问题的另一部分——文件名中的其他字符——非常不寻常,以至于你不太可能找到其他人为你打包了一个模块。

在没有看到更多样本数据的情况下,实际上只能猜测,但我会首先确定可能或可能的“日期部分”候选者。

这是一个使用 Date::Parse 的讨厌的暴力示例(更聪明的方法是使用 regex-en 列表来尝试识别日期位 - 我很高兴消耗 cpu 周期而不想那么难!)

!/usr/bin/perl
use strict;
use warnings;
use Date::Parse;

my @files=("Report Aug06.xls", "ReportAug2006", "Report 11th September 2006.xls",
"Annual Report-08-06", "End-of-month Report01-08-06.xls", "Report2006");

# assumption - longest likely date string is something like '11th September 2006' - 19 chars
# shortest is "2006" - 4 chars.
# brute force all strings from 19-4 chars long at the end of the filename (less extension)
# return the longest thing that Date::Parse recognises as a date



foreach my $file (@files){
#chop extension if there is one
$file=~s/\..*//;
for my $len (-19..-4){
my $string = substr($file, $len);
my $time = str2time($string);
print "$string is a date: $time = ",scalar(localtime($time)),"\n" if $time;
last if $time;
}
}

关于perl - 从字符串中提取格式不一致的日期(日期解析,NLP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3445358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com