| // Licensed to the Apache Software Foundation (ASF) under one | |
| // or more contributor license agreements. See the NOTICE file | |
| // distributed with this work for additional information | |
| // regarding copyright ownership. The ASF licenses this file | |
| // to you under the Apache License, Version 2.0 (the | |
| // "License"); you may not use this file except in compliance | |
| // with the License. You may obtain a copy of the License at | |
| // | |
| // http://www.apache.org/licenses/LICENSE-2.0 | |
| // | |
| // Unless required by applicable law or agreed to in writing, | |
| // software distributed under the License is distributed on an | |
| // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
| // KIND, either express or implied. See the License for the | |
| // specific language governing permissions and limitations | |
| // under the License. | |
| PACKAGE uima.ruta.example; | |
| SCRIPT uima.ruta.example.Features; | |
| Document{-> CALL(Features)}; | |
| DECLARE AuthorSTART, AuthorEND, DateSTART, DateEND, PagesSTART, PagesEND, PublisherSTART, PublisherEND, InstitutionSTART, InstitutionEND, VolumeSTART, VolumeEND, EditorSTART, EditorEND, TitleSTART, TitleEND, BooktitleSTART, BooktitleEND, NoteSTART, NoteEND, JournalSTART, JournalEND, LocationSTART, LocationEND, TechSTART, TechEND; | |
| BLOCK(Reference) Reference{} { | |
| // uima.ruta.example.Author RULES | |
| FirstToken{->MARKONCE(Author, 1, 7)} COMMA FirstNameInitial[1,2]? NameLinker[1,2]? CW CommaSep FirstNameInitial[1,2]? LParen; // p=7; n=0 | |
| FirstToken{->MARKONCE(Author, 1, 4)} CommaSep CW[1,2]? PERIOD LParen; // p=4; n=0 | |
| FirstToken{->MARKONCE(Author, 1, 5)} CommaSep FirstNameInitial[1,2]? CW PERIOD SPECIAL; // p=2; n=0 | |
| FirstToken{->MARKONCE(Author, 1, 15)} CommaSep FirstNameInitial COMMA CW NameLinker FirstNameInitial COMMA CW CommaSep FirstNameInitial NameLinker[1,2]? CW COMMA FirstNameInitial; // p=1; n=0 | |
| // uima.ruta.example.AuthorSTART RULES | |
| FirstToken{->MARKONCE(AuthorSTART)}; // p=20; n=0 | |
| // uima.ruta.example.AuthorEND RULES | |
| PERIOD{->MARKONCE(AuthorEND)} LParen; // p=20; n=0 | |
| // uima.ruta.example.Date RULES | |
| SPECIAL{->MARKONCE(Date, 1, 4)} YearInd SPECIAL PERIOD; // p=20; n=0 | |
| // uima.ruta.example.DateSTART RULES | |
| LParen{->MARKONCE(DateSTART)} YearInd; // p=20; n=0 | |
| // uima.ruta.example.DateEND RULES | |
| SPECIAL PeriodSep{->MARKONCE(DateEND)} CW; // p=20; n=0 | |
| } | |
| BLOCK(Paragraph) Paragraph{} { | |
| // uima.ruta.example.Pages RULES | |
| NUM{->MARKONCE(Pages, 1, 4)} SPECIAL NUM PeriodSep; // p=15; n=0 | |
| // uima.ruta.example.PagesSTART RULES | |
| COMMA NUM{->MARKONCE(PagesSTART)} SPECIAL NUM PERIOD; // p=15; n=0 | |
| // uima.ruta.example.PagesEND RULES | |
| NUM LastToken{->MARKONCE(PagesEND)}; // p=15; n=0 | |
| // uima.ruta.example.Publisher RULES | |
| CW{->MARKONCE(Publisher, 1, 4)} SPECIAL CW NameLinker; // p=1; n=0 | |
| CW{->MARKONCE(Publisher, 1, 4)} SW CW[1,2]? CommaSep FirstName; // p=1; n=0 | |
| PERIOD FirstName{->MARKONCE(Publisher, 2, 3)} COMMA; // p=1; n=0 | |
| // uima.ruta.example.PublisherSTART RULES | |
| CW PeriodSep CW{->MARKONCE(PublisherSTART)}; // p=3; n=5 | |
| PeriodSep CW{->MARKONCE(PublisherSTART)} SPECIAL; // p=1; n=0 | |
| PERIOD CW[1,3]? PeriodSep CW{->MARKONCE(PublisherSTART)}; // p=1; n=0 | |
| // uima.ruta.example.PublisherEND RULES | |
| PublisherInd CommaSep{->MARKONCE(PublisherEND)} CW; // p=1; n=0 | |
| CW CommaSep{->MARKONCE(PublisherEND)} FirstName NameLinker; // p=1; n=0 | |
| PeriodSep FirstName CommaSep{->MARKONCE(PublisherEND)} CW; // p=1; n=0 | |
| // uima.ruta.example.Institution RULES | |
| CW{->MARKONCE(Institution, 1, 8)} EnglishStopWord CW CommaSep FirstNameInitial EnglishStopWord CW PERIOD; // p=1; n=0 | |
| // uima.ruta.example.InstitutionSTART RULES | |
| CommaSep CW{->MARKONCE(InstitutionSTART)} EnglishStopWord; // p=1; n=0 | |
| // uima.ruta.example.InstitutionEND RULES | |
| EnglishStopWord CW LastToken{->MARKONCE(InstitutionEND)}; // p=1; n=0 | |
| // uima.ruta.example.Volume RULES | |
| COMMA NUM{->MARKONCE(Volume, 2, 3)} NameLinker Pages; // p=8; n=0 | |
| NUM{->MARKONCE(Volume, 1, 5)} SPECIAL NUM RParen NameLinker; // p=5; n=0 | |
| NUM{->MARKONCE(Volume, 1, 9)} LParen NUM COMMA NUM NameLinker NUM RParen NameLinker; // p=1; n=0 | |
| // uima.ruta.example.VolumeSTART RULES | |
| COMMA NUM{->MARKONCE(VolumeSTART)} CommaSep Pages; // p=8; n=0 | |
| NUM{->MARKONCE(VolumeSTART)} LParen; // p=6; n=0 | |
| // uima.ruta.example.VolumeEND RULES | |
| CommaSep{->MARKONCE(VolumeEND)} PagesSTART; // p=14; n=1 | |
| SPECIAL CommaSep{->MARKONCE(VolumeEND)} PagesSTART; // p=6; n=0 | |
| } | |
| BLOCK(Reference) Reference{} { | |
| // uima.ruta.example.Title RULES | |
| DateEND CW{->MARKONCE(Title, 2, 4)} SW[1,9]? PeriodSep; // p=10; n=0 | |
| CW{->MARKONCE(Title, 1, 5)} SW[1,5]? SPECIAL SW[1,5]? PeriodSep; // p=2; n=0 | |
| CW[1,2]?{->MARKONCE(Title, 1, 4)} SW[1,2]? CW[1,3]? PeriodSep; // p=2; n=0 | |
| CW{->MARKONCE(Title, 1, 8)} NameLinker EnglishStopWord CW SPECIAL CW SW PeriodSep; // p=1; n=0 | |
| CW{->MARKONCE(Title, 1, 6)} SW[1,3]? NUM SPECIAL SW[1,3]? PeriodSep; // p=1; n=0 | |
| CW{->MARKONCE(Title, 1, 6)} NameLinker SW[1,5]? CAP SW PeriodSep; // p=1; n=0 | |
| CW{->MARKONCE(Title, 1, 7)} COMMA CW COMMA EnglishStopWord CW PERIOD; // p=1; n=0 | |
| CW{->MARKONCE(Title, 1, 8)} SW[1,8]? COLON CW SW[1,2]? FirstName SW PeriodSep; // p=1; n=0 | |
| CW[1,3]?{->MARKONCE(Title, 1, 2)} PeriodSep FirstName; // p=1; n=0 | |
| // uima.ruta.example.TitleSTART RULES | |
| Date CW{->MARKONCE(TitleSTART)}; // p=20; n=0 | |
| // uima.ruta.example.TitleEND RULES | |
| PeriodSep{->MARKONCE(TitleEND)} CW; // p=20; n=38 | |
| SW PeriodSep{->MARKONCE(TitleEND)} CW; // p=16; n=0 | |
| PeriodSep{->MARKONCE(TitleEND)} Publisher; // p=3; n=0 | |
| } | |
| BLOCK(Paragraph) Paragraph{} { | |
| // uima.ruta.example.Booktitle RULES | |
| CW{->MARKONCE(Booktitle, 1, 6)} EnglishStopWord CAP SPECIAL NUM COMMA; // p=1; n=0 | |
| // uima.ruta.example.BooktitleSTART RULES | |
| Title CW{->MARKONCE(BooktitleSTART)} EnglishStopWord CAP; // p=1; n=0 | |
| // uima.ruta.example.BooktitleEND RULES | |
| SPECIAL NUM COMMA{->MARKONCE(BooktitleEND)} PagesSTART SPECIAL; // p=1; n=0 | |
| } | |
| BLOCK(Paragraph) Paragraph{} { | |
| // uima.ruta.example.Journal RULES | |
| PeriodSep CW[1,3]?{->MARKONCE(Journal, 2, 3)} COMMA VolumeSTART; // p=7; n=0 | |
| CW{->MARKONCE(Journal, 1, 4)} SW[1,2]? CW[1,3]? COMMA NUM; // p=4; n=0 | |
| CW{->MARKONCE(Journal, 1, 4)} EnglishStopWord[1,2]? CAP COMMA; // p=1; n=0 | |
| FirstNameInitial{->MARKONCE(Journal, 1, 3)} CAP COMMA; // p=1; n=0 | |
| CW{->MARKONCE(Journal, 1, 8)} EnglishStopWord CW[1,2]? NameLinker CW PeriodSep CAP NameLinker; // p=1; n=0 | |
| // uima.ruta.example.JournalSTART RULES | |
| Title CW{->MARKONCE(JournalSTART)}; // p=14; n=6 | |
| Title CW{->MARKONCE(JournalSTART)} CW; // p=6; n=0 | |
| Title CW{->MARKONCE(JournalSTART)} InInd; // p=1; n=0 | |
| // uima.ruta.example.JournalEND RULES | |
| COMMA{->MARKONCE(JournalEND)} Volume; // p=14; n=0 | |
| // uima.ruta.example.Location RULES | |
| CW{->MARKONCE(Location, 1, 3)} FirstName PeriodSep; // p=2; n=0 | |
| CW{->MARKONCE(Location, 1, 4)} NameLinker CW LastToken; // p=1; n=0 | |
| // uima.ruta.example.LocationSTART RULES | |
| PublisherEND CW{->MARKONCE(LocationSTART)}; // p=3; n=0 | |
| // uima.ruta.example.LocationEND RULES | |
| CommaSep CW[1,2]? LastToken{->MARKONCE(LocationEND)}; // p=3; n=0 | |
| // uima.ruta.example.Tech RULES | |
| CW{->MARKONCE(Tech, 1, 5)} PERIOD SW PeriodSep CommaSep; // p=1; n=0 | |
| // uima.ruta.example.TechSTART RULES | |
| PERIOD CW{->MARKONCE(TechSTART)} PeriodSep; // p=1; n=0 | |
| // uima.ruta.example.TechEND RULES | |
| CommaSep{->MARKONCE(TechEND)} Institution; // p=1; n=0 | |
| } | |
| // BOUNDARY CORRECTION RULES: | |
| PublisherSTART{OR(CONTAINS(Reference), CONTAINS(AuthorSTART), CONTAINS(FirstToken), CONTAINS(Booktitle), CONTAINS(BooktitleSTART))->UNMARK(PublisherSTART)}; // p=0; n=5 | |
| VolumeEND{CONTAINS(BooktitleEND)->UNMARK(VolumeEND)}; // p=0; n=1 | |
| TitleEND{CONTAINS(DateEND)->UNMARK(TitleEND)}; // p=0; n=20 | |
| JournalSTART{OR(CONTAINS(Reference), CONTAINS(AuthorSTART), CONTAINS(FirstToken), CONTAINS(Publisher), CONTAINS(FirstName), CONTAINS(Booktitle), CONTAINS(BooktitleSTART), CONTAINS(Tech), CONTAINS(TechSTART), CONTAINS(PublisherInd))->UNMARK(JournalSTART)}; // p=0; n=6 | |
| // CONNECTORS: | |
| BLOCK(ReferenceConnectors) Reference{} { | |
| AuthorSTART{->MARKONCE(Author,1,3)} ANY*? AuthorEND; | |
| AuthorSTART{IS(AuthorEND)->MARKONCE(Author)} ; | |
| DateSTART{->MARKONCE(Date,1,3)} ANY*? DateEND; | |
| DateSTART{IS(DateEND)->MARKONCE(Date)} ; | |
| TitleSTART{->MARKONCE(Title,1,3)} ANY*? TitleEND; | |
| TitleSTART{IS(TitleEND)->MARKONCE(Title)} ; | |
| } | |
| BLOCK(ParagraphConnectors) Paragraph{} { | |
| PagesSTART{->MARKONCE(Pages,1,3)} ANY*? PagesEND; | |
| PagesSTART{IS(PagesEND)->MARKONCE(Pages)} ; | |
| PublisherSTART{->MARKONCE(Publisher,1,3)} ANY*? PublisherEND; | |
| PublisherSTART{IS(PublisherEND)->MARKONCE(Publisher)} ; | |
| InstitutionSTART{->MARKONCE(Institution,1,3)} ANY*? InstitutionEND; | |
| InstitutionSTART{IS(InstitutionEND)->MARKONCE(Institution)} ; | |
| VolumeSTART{->MARKONCE(Volume,1,3)} ANY*? VolumeEND; | |
| VolumeSTART{IS(VolumeEND)->MARKONCE(Volume)} ; | |
| BooktitleSTART{->MARKONCE(Booktitle,1,3)} ANY*? BooktitleEND; | |
| BooktitleSTART{IS(BooktitleEND)->MARKONCE(Booktitle)} ; | |
| JournalSTART{->MARKONCE(Journal,1,3)} ANY*? JournalEND; | |
| JournalSTART{IS(JournalEND)->MARKONCE(Journal)} ; | |
| LocationSTART{->MARKONCE(Location,1,3)} ANY*? LocationEND; | |
| LocationSTART{IS(LocationEND)->MARKONCE(Location)} ; | |
| TechSTART{->MARKONCE(Tech,1,3)} ANY*? TechEND; | |
| TechSTART{IS(TechEND)->MARKONCE(Tech)} ; | |
| } | |
| EditorSTART{->MARKONCE(Editor,1,3)} ANY*? EditorEND; | |
| EditorSTART{IS(EditorEND)->MARKONCE(Editor)} ; | |
| NoteSTART{->MARKONCE(Note,1,3)} ANY*? NoteEND; | |
| NoteSTART{IS(NoteEND)->MARKONCE(Note)} ; | |
| // CORRECTION RULES: |