From c3bb7ba984f841c8e2aa05ad0a1aa7553429f04e Mon Sep 17 00:00:00 2001 From: iwpnd Date: Mon, 2 Mar 2020 16:17:09 +0100 Subject: [PATCH] updated LookupDataPool to use LookupData.script if not 'default'. added tests for cyrillic. updated usage.md to show use of script --- .gitignore | 2 + docs/usage.md | 48 ++++++++++++++++++++- tests/integration/test_geotext_extractor.py | 24 +++++++++++ tests/unit/test_lookup_data_pool.py | 15 +++++++ 4 files changed, 88 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 648e72a..6c1a554 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,8 @@ untitled.txt .DS_Store .vscode/ TODO +.jekyll-cache/ +_site/ # C extensions diff --git a/docs/usage.md b/docs/usage.md index f370fd9..214d020 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -42,7 +42,7 @@ geotext.extract(input_text=input_text, span_info=True) } ``` -### Bring your own data +### Bring your own data (default script) ```python from flashgeotext.geotext import GeoText @@ -88,6 +88,52 @@ geotext.extract(text, span_info=False) } ``` +### Bring your own data (with script) + +```python +from flashgeotext.geotext import GeoText +from flashgeotext.lookup import LookupData + +cyrillic_city = {"Нижневартовск": ["Нижневартовск"]} + +text = """ + В Нижневартовском районе ограничили грузоподъемность + на ледовых переправах Проехать по ледовой переправе + сможет только транспорт весом не более 5 тонн. + В связи с потеплением в Нижневартовском районе + введено ограничение грузоподъемности на ледовых переправах. + По направлению Нижневартовск - Вампугол – Былино, а + также Белорусский - Ларьяк , Ларьяк - Чехломей - Большой Ларьяк, + Былино - Зайцева Речка снижена грузоподъемность до 5 тонн. + Лед на реках еще вполне толстый и переправа пригодна для + эксплуатации, однако зимник начал подтаивать, + орогу развезло. Потому принято решение снизить грузоподъемность + на нём до 5 тонн, сообщает ОТРК «Югра». + Всего на реках Югры работают 89 ледовых переправ. + Их обычная грузоподъемность от 15 до 30 тонн. Отметим, + что традиционно в середине апреля закрываются для движения + автотранспорта все ледовые переправы. + """ + +lookup_cyrillic_city = LookupData( + name="cyrillic", + data=cyrillic_city, + script="cyrillic" + ) + +geotext = GeoText(use_demo_data=False) +geotext.add(lookup_cyrillic_city) + +print(len(geotext.pool)) +>> 1 + +geotext.extract(text, span_info=False) + +>> {'cyrillic': {'Нижневартовск': {'count': 1}}} +``` + +Actually the city `Нижневартовск` is present three times in the text, but we did not specify `Нижневартовском` to be the same as `Нижневартовск`. + ### Data handling #### add data to pool diff --git a/tests/integration/test_geotext_extractor.py b/tests/integration/test_geotext_extractor.py index a7ec9b0..0342f12 100644 --- a/tests/integration/test_geotext_extractor.py +++ b/tests/integration/test_geotext_extractor.py @@ -1,6 +1,7 @@ import pytest from flashgeotext.geotext import GeoText +from flashgeotext.lookup import LookupData from flashgeotext.lookup import MissingLookupDataError text = "Berlin ist die Hauptstadt von Deutschland. Berlin ist nicht haesslich, aber auch nicht sonderlich schoen." @@ -154,3 +155,26 @@ def test_geotext_extract_countries(nr, text, expected_countries, geotext): output = geotext.extract(input_text=text, span_info=False) assert all([country in output["countries"] for country in expected_countries]) + + +def test_geotext_with_script_added_to_non_word_boundaries(): + cyrillic = LookupData( + name="test_1", data={"Нижневартовск": ["Нижневартовск"]}, script="cyrillic" + ) + geotext = GeoText(use_demo_data=False) + geotext.add(cyrillic) + + text = """ + В Нижневартовском районе ограничили грузоподъемность на ледовых переправах + Проехать по ледовой переправе сможет только транспорт весом не более 5 тонн. + В связи с потеплением в Нижневартовском районе введено ограничение грузоподъемности на ледовых переправах. + По направлению Нижневартовск - Вампугол – Былино, а также Белорусский - Ларьяк , Ларьяк - + Чехломей - Большой Ларьяк, Былино - Зайцева Речка снижена грузоподъемность до 5 тонн. + Лед на реках еще вполне толстый и переправа пригодна для эксплуатации, однако зимник начал подтаивать, + орогу развезло. Потому принято решение снизить грузоподъемность на нём до 5 тонн, сообщает ОТРК «Югра». + Всего на реках Югры работают 89 ледовых переправ. Их обычная грузоподъемность от 15 до 30 тонн. Отметим, + что традиционно в середине апреля закрываются для движения автотранспорта все ледовые переправы. + """ + + result = geotext.extract(text, span_info=False) + result["test_1"]["Нижневартовск"]["count"] == 1 diff --git a/tests/unit/test_lookup_data_pool.py b/tests/unit/test_lookup_data_pool.py index 022d9a7..79d4fa0 100644 --- a/tests/unit/test_lookup_data_pool.py +++ b/tests/unit/test_lookup_data_pool.py @@ -5,6 +5,7 @@ from flashgeotext.lookup import LookupDataPool from flashgeotext.lookup import LookupDuplicateError from flashgeotext.settings import DEMODATA_CITIES +from flashgeotext.settings import SCRIPTS def test_lookup_data_pool(test_data_cities): @@ -68,6 +69,20 @@ def test_lookup_data_pool_remove_all_from_pool(test_data_cities): assert not processor.pool +def test_lookup_data_pool_script_non_word_boundaries(test_data_cities): + lookup = LookupData(name="cities", data=test_data_cities, script="latin") + + processor = LookupDataPool() + processor.add(lookup) + + assert all( + [ + char in processor.pool["cities"].non_word_boundaries + for char in SCRIPTS["latin"]["chars"] + ] + ) + + def test_load_data_from_file(): cities = load_data_from_file(DEMODATA_CITIES) assert cities