如何提高文本解析函数的性能?

3
我将尝试从葡萄酒标题中解析出年份。使用以下代码,我似乎可以获得约50%的准确性,但如果可能的话,我希望改进这一点。有人知道我该怎么做才能提高准确性吗?
以下是示例标题及其解析出的年份:
Quinta dos Avidagos 2011 Avidagos Red (Douro) -> 0 incorrect
Rainstorm 2013 Pinot Gris (Willamette Valley) -> 2011 incorrect
Louis M. Martini 2012 Cabernet Sauvignon -> 2012 correct
Mirassou 2012 Chardonnay (Central Coast) -> 2012 correct

我正在实现的代码:

from dateutil.parser import parse
from datetime import datetime, timezone

df = "my pandas dataframe with wine titles"
dt = datetime.now()
dt.replace(tzinfo=timezone.utc)

year_parse = []
for i in range(len(df['title'])):
    try:
        ans = parse(df.title[i], fuzzy=True).year
        year_parse.append(int(ans))
    except:
        ans = 0
        year_parse.append(int(ans))

非常感谢任何建议!

3
看起来需要使用正则表达式完成任务,类似于\b\d{4}\b。 - Klaus Gütter
1
如果除了年份以外,有机会出现四个连续的数字,则可以稍微优化一下正则表达式,以提高其准确性:\b[19|20]\d{2}\b - Brennen Sprimont
1个回答

4

你可以使用正则表达式来实现此功能。我希望葡萄酒名称具有相同的模式。

import re
exp = re.compile(r'\d{4}')
year_parse = list()
for name in df['title']:
      year = exp.findall(name)[0]
      year_parse.append(year)

year_parse 把所有的年份都存储在一个列表中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接