spaCy/spacy/lang/nl/lex_attrs.py

45 lines
1.3 KiB
Python
Raw Normal View History

# coding: utf8
from __future__ import unicode_literals
from ...attrs import LIKE_NUM
2019-08-20 15:36:34 +00:00
_num_words = set(
"""
nul een één twee drie vier vijf zes zeven acht negen tien elf twaalf dertien
veertien twintig dertig veertig vijftig zestig zeventig tachtig negentig honderd
duizend miljoen miljard biljoen biljard triljoen triljard
2019-08-20 15:36:34 +00:00
""".split()
)
2019-08-20 15:36:34 +00:00
_ordinal_words = set(
"""
eerste tweede derde vierde vijfde zesde zevende achtste negende tiende elfde
twaalfde dertiende veertiende twintigste dertigste veertigste vijftigste
zestigste zeventigste tachtigste negentigste honderdste duizendste miljoenste
miljardste biljoenste biljardste triljoenste triljardste
2019-08-20 15:36:34 +00:00
""".split()
)
def like_num(text):
# This only does the most basic check for whether a token is a digit
# or matches one of the number words. In order to handle numbers like
# "drieëntwintig", more work is required.
# See this discussion: https://github.com/explosion/spaCy/pull/1177
2019-08-20 15:36:34 +00:00
text = text.replace(",", "").replace(".", "")
if text.isdigit():
return True
2019-08-20 15:36:34 +00:00
if text.count("/") == 1:
num, denom = text.split("/")
if num.isdigit() and denom.isdigit():
return True
2018-01-08 02:25:08 +00:00
if text.lower() in _num_words:
return True
if text.lower() in _ordinal_words:
return True
return False
2019-08-20 15:36:34 +00:00
LEX_ATTRS = {LIKE_NUM: like_num}