Извлечение единиц (с или без числовых величин) из текстовых данных - PullRequest
0 голосов
/ 13 апреля 2020

Я пытаюсь обрабатывать тексты, содержащие технические данные, и извлекать любые единицы, используемые в тексте.

Я исследовал несколько библиотек Python для этой цели, но большинство, кажется, не в состоянии извлечь единицы, когда нет связанного числа. Например, я хотел бы найти «Гц» (или некоторую его форму) из предложения «Все частоты будут сообщаться в Гц». случаи и тесты показывают, что они не находят единицы измерения, когда нет соответствующего числового значения или квалификатора Другие пакеты, такие как pint, казались разработанными для вычислений, а не NLP.

Существуют ли другие пакеты, которые будут работать?

Я бы тоже неплохо нашел решение; просто сопоставление с некоторым обширным списком единиц и их различными сокращениями, но я не смог найти такой список. Указатели на один, если он существует, будут оценены. Должны быть такие списки, лежащие в основе существующих пакетов управления объектами, но я не уверен, как к ним добраться.

1 Ответ

0 голосов
/ 14 апреля 2020

Начальная точка: вы можете использовать регулярное выражение.

Например:

import re

para = """
This long text may contains units like kg, W, s, m.
"""

print(
    re.findall(
        r"\b(?:dag|dam|daL|min|sec|rad|deg|bar|mol|kg|hg|dg|cg|mg|\xb5g"
        r"|km|hm|dm|cm|mm|\xb5m|kL|hL|dL|cL|mL|\xb5L|ms|\xb0C|\xb0F"
        r"|sr|Pa|dB|eV|Bq|Ci|Gy|rd|Sv|cd|lm|lx|Gs|Mx|Wb|F|g|m|L|s|h"
        r"|K|B|N|W|J|A|V|H|C|T)\b",
        para,
        flags=re.DOTALL,
    )
)

Вы получаете:

['kg', 'W', 's', 'm']

Но у вас может быть ложный положительный результат .

Более сложное регулярное выражение необходимо, например, для соответствия "кВт.м ^ {- 1}".

РЕДАКТИРОВАТЬ

Пример «Более сложное регулярное выражение» может быть позицией GPS:

GPS_COORD_REGEX = (
    r"(?:"
    r"(\d+(?:[.,]\d+)?)\s*°"  # group 1
    r"\s*"
    r"(\d+(?:[.,]\d+)?)\s*['’\u2032]"  # group 2
    r"(?:\s*"
    r"(\d+(?:[.,]\d+)?)\s*(?:[»«“”\u2033]|['’\u2032]{2}))?"  # group 3
    r")"
)

Другой пример: совпадение m ^ 2, см ^ 2 и т. д. c. :

regex=r"\b(km|hm|dam|m|dm|cm|mm|µm)([23])\b"
...