2020-03-18 19:33:54 +00:00
|
|
|
|
|
|
|
import re
|
|
|
|
from logging import NullHandler, getLogger
|
|
|
|
|
|
|
|
import babelfish
|
|
|
|
|
2022-01-24 04:07:52 +00:00
|
|
|
from knowit.core import Rule
|
2020-03-18 19:33:54 +00:00
|
|
|
|
|
|
|
logger = getLogger(__name__)
|
|
|
|
logger.addHandler(NullHandler())
|
|
|
|
|
|
|
|
|
|
|
|
class LanguageRule(Rule):
|
|
|
|
"""Language rules."""
|
|
|
|
|
|
|
|
name_re = re.compile(r'(?P<name>\w+)\b', re.IGNORECASE)
|
|
|
|
|
|
|
|
def execute(self, props, pv_props, context):
|
|
|
|
"""Language detection using name."""
|
|
|
|
if 'language' in props:
|
|
|
|
return
|
|
|
|
|
|
|
|
if 'name' in props:
|
|
|
|
name = props.get('name', '')
|
|
|
|
match = self.name_re.match(name)
|
|
|
|
if match:
|
|
|
|
try:
|
|
|
|
return babelfish.Language.fromname(match.group('name'))
|
|
|
|
except babelfish.Error:
|
|
|
|
pass
|
|
|
|
logger.info('Invalid %s: %r', self.description, name)
|