File size: 3,249 Bytes
de94ed3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
191af2e
a8b7db5
 
 
 
 
 
 
 
 
 
 
 
191af2e
910e2fa
 
 
 
 
 
191af2e
 
 
de94ed3
a8b7db5
de94ed3
 
191af2e
 
 
 
 
 
 
 
910e2fa
de94ed3
191af2e
a8b7db5
910e2fa
 
a8b7db5
 
 
191af2e
 
 
 
 
 
 
de94ed3
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import gradio as gr
from transformers import AutoTokenizer, AutoModelForTokenClassification, pipeline

# Load your fine-tuned CamemBERT NER model
model_name = "GEODE/camembert-base-edda-span-classification"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForTokenClassification.from_pretrained(model_name)


ner_pipeline = pipeline("token-classification", model=model, tokenizer=tokenizer, aggregation_strategy="simple")

def extract_coordinates(text):
    # Run NER
    entities = ner_pipeline(text)
    
    # Collect coordinate entities
    coords_text = [ent['word'] for ent in entities if ent['entity_group'] == 'Latlong']
    
    if coords_text:
        return "\n".join(coords_text)
    else:
        return "No coordinates found"


def norm_coordinates(text):

    generator = pipeline("text2text-generation", model="GEODE/mt5-small-coords-norm")
    
    # Example input text
    input_text = "extract_coordinates: " + text

    # Generate prediction using the pipeline
    predicted_coordinates_from_pipeline = generator(input_text, max_length=128)

    return predicted_coordinates_from_pipeline[0]['generated_text']

examples = [
    "* AACH ou ACH, s. f. petite ville d'Allemagne dans le cercle de Souabe, près de la source de l'Aach. Long. 26. 57. lat. 47. 55.",
    "* ARCALU (Principauté d') petit état des Tartares-Monguls, sur la riviere d'Hoamko, où commence la grande muraille de la Chine, sous le 122e degré de longitude & le 42e de latitude septentrionale.",
    "* ARÉQUIPE, ou ARIQUIPA, (Géog.) ville de l'Amérique méridion. dans le Pérou, sur une riviere, dans un terrein fertile. Long. 308. lat. mérid. 16. 40.",
    "* AUTAN-KELURAN, (Géog.) ville du Turquestan. Long. 110d. & lat. 46. 45. selon Uluhbeg ; & long. 116. & lat. 45. selon Nassiredden.",
    "Boston ; c'est le nom qu'on a donné à la ville capitale de la nouvelle Angleterre, dans l'Amérique septentrionale ; elle est grande & a un très-bon port. Lat. 42 degrés, 20 minutes ; long. 306 degrés, 50 & quelques minutes.",
    "CABEÇA-DE-VIDE, (Géog.) petite ville avec château, en Portugal, dans l'Alentéjo, à cinq lieues de Port-Alegre. Longitude 10. 48. latitude 39."
]


with gr.Blocks() as demo:
    gr.Markdown("## Geographic Coordinate Extractor")
    
    with gr.Row():
        with gr.Column():
            inp = gr.Textbox(
                label="Enter text", 
                placeholder="e.g. * AACH ou ACH, s. f. petite ville d'Allemagne dans le cercle de Souabe, près de la source de l'Aach. Long. 26. 57. lat. 47. 55.",
                lines=3
            )

            run_btn = gr.Button("Extract & Show")
            
    
        with gr.Column():
            out_text = gr.Textbox(label="Extracted coordinates (fine-tuned CamemBERT NER)")
            run_btn.click(fn=extract_coordinates, inputs=inp, outputs=out_text)

            out_text = gr.Textbox(label="Extracted and normalized coordinates (fine-tuned mT5)")
            run_btn.click(fn=norm_coordinates, inputs=inp, outputs=out_text)

    with gr.Row():
        
        gr.Examples(
            examples=examples,
            inputs=inp,
            label="Examples"
        )

# Launch
if __name__ == "__main__":
    demo.launch()