This document describes the main tasks involved with editing proper nouns, first laying out all steps as detailed as possible, then trying to generalise and abstract somewhat. The end result will be used as a guideline for developing the web interface for our proper noun lexicon in risten.no. Simple editing of single entries will not be covered, as we already have a basic model and interface for that case. !!!Adding a list of names !!Work flow as of today Starting point: we have a list of names for a language # If the stem and the citation form are identical: ## group according to contlex and tag?, and add them ## how do you group?: ### Stems are grouped according to their phonological properties ==> {{rev + sort + rev & manual check/sort}} ### cons-final, heavy syll => BERN ### cons-final, light syll => LONDON ### ... ( cf. the not entirely up-to-date-documentation) ### manually tagging cont-lex (with some help from the phonol/metr. structure) (see table below) ## Group according to semantics, and add subtag (-plc, -sur, etc), semi-manually ### Do search-replace on certain affixes: -fjell, -li, jávri, -sen ### Order the file in reverse order ### Use Saara's multiple-choice script namelex.el, in emacs, and tag manually. # If the stem and the citation form are different ## make two parallel lists: the lemma (list-a) and the stem (list-b) ## Add tags to list-b ## paste -d: list-a list-b >> propernoun-sme-lex.txt {{{ Type StemCoda CG IllChange Loc Lexicon Status LightVow no yes -s ACCRA tmp LightVow yes yes -s MARJA HeavyVow no no -as NYSTØ tmp HeavyCns no no -as BERN LightCns no no -is LONDON -nen no no -as/nenis C-FI-NEN GUOLBBA ! Trisyll. Inanim. Gradating 0-Nouns DUORTNUS ! Cns-final, cons.grad. ANAR ! Cns-fin, no cons.grad. HEANDARAT ! Bisyll. Non-Gradating C-Proper Names NIILLAS ! Trisyll. Non-Gradating C-Proper Names GEAVNNIS Plural names VARGGAT ALEUHTAT SULLOT EATNAMAT HEANDARAT }}} !!Pseudo code for adding a list of names User: # click a button in the hit-list frame: "Add list of names" Application: # create an HTML form, and display it in the editor frame (see mock-up below) User: # specify language (default is stored in a cookie, and used next time; if no cookie, then 'sme') # paste the list into a text field # optionally specify cont-lex, if mostly the same for all # submit Application: # store the time of submission # split the string of names into a list # for each name in list: ## if the name exists, then: ### create and store a lang entry ### if cont-lex then use it else guess based on some heuristics (cf Trond's table above, and our docs) ### create and store the corresponding concept entry, using the sem-tag info if available ## else ### only update the comment field ("tried to add X as new, but did already exist") ### and update the timestamp # when all entries are stored: search for all names with a change time > submission time; present the list in the hit-list frame, ready for further editing !!UI mock-up for adding a list of names {{{ +-----------------+ | select language | (pop-up, menu from langmenu.xq) +-----------------+ +-----------+ | | | paste | | names | | here | | | +-----------+ +------------------+ | select cont-lex | (pop-up menu, includes option 'unspecified') +------------------+ +------------------+ | select sem-tag | (pop-up menu, default option 'unspecified') +------------------+ +----------+ | SUBMIT | +----------+ }}} !!!Add info to a group of names User: * create a search that extracts the entries to be updated * click the "add info to all" button * fill in the form, and submit Application: * iterate over the found set (from the search above, stored in a session variable), and update each entry with the new info * rerun the search, so that the user easily can verify that the new info was added !!!Changing a group of names Normally changing is done on single entries, but occasionally groups of names can be changed. !!Changing single entries Something similar to what we have for SD-terms now !!Groups of entries Similar to the "Add info to group" above (adding and changing is conceptually different actions, but identical when it comes to implementation), but populates the fields in the form with values taken from elements with only one unique value across all found entries (that is, no value in the fields corresponding to elements with several values across entries). !!!Associating a name with its concept/correct & merge multiple names This one is the one needed for efficient correction of parallel names earlier treated as instances of multiple, monolingual names. This one requires that it is possible to look at two lists at the same time !!!Merging independent entries to parallel entries !!Objective Take a list of parallel names, and check whether they are really linked to the same concept; if not, link them !!!Adding a new language to a concept This can be done similar to how it is done in SD-terms. !!!List of useful, ready-made queries * all entries added within last (24h|week|month) (use language menu to restrict to a specific language) * all entries added/modified by "me"/"NN" * the entries I worked on last time (requires the search expression to be stored in a cookie) !!!Problems in the data structure not considered earlier When we considered the many-to-many relationship between names in different languages (one "concept" can have different names in different languages, and one name in one language can have more than one meaning/"concept"), we didn't foresee the situation that language forms from __all__ majority languages may just as well be used in the minority language alongside the minority language form. Example: {{{ }}} The equivalence between names in different languages can be classified as follows: {{{ Per Klemetsen lea Helssegis. Piera - Per = weak equivalence = fem, mal Helsset - Helsinki = strong equivalence = plc (not absolute, cf. Karasjok Produkter in a Saami text) Samisk høgskole - Sámi Állaskuvla = Absolute equivalence = org }}} Strategy summary: || Equiv. strength <=> sem. tag || compilation action |Weak <=> mal, fem, sur | Export all langentries to the sme transducer. |Strong <=> plc| Export all langentries to sme (but perhaps discard when needed) |Absolute <=> org | Export only the explicit sme entries to the sme transducer More examples: {{{ Peras / *Pieras ii leat vejolašvuohta... Nils lea dappe, Niillas lea maid bohtán. }}} !!Implementation changes The following points need consideration: * the majority name forms still need inflections according to the language it is used in, e.g. 'Per' needs a proper cont-lex for North Saami in the sme transducer * there's a difference between names of persons, places and organisations. It might be better NOT to link person names, and thus restrict cross-language linking to places and organisations (and acronyms thereof) split the names weak association linkage document => linking surnames, linking first names (Pekka appendices) => linking synonyms (Jovnna-Ánde Vest) => linking hypo- and hyperonyms (Nielsen, last part, Wordnet) Synonyms in SD-terms is stored as links between entries in the *language* files Conversion from one lg-unspecified list (35000 names) to our future system: either 1. a. find correspondence sets b. multiply the rest or 2: a. multiply all <===================== b. unify and prune when needed Finding correspondence sets x6 or whatever, yes, once (one file) for each language Vuotke#vuotna <=== this is a ref to the ID in common x6 or whatever, yes, once (one file) for each language Goavkejohka a. split the uniformly generated names b. unify the different names Finding correspondence sets (strong correspondences, Helsinki - Helsset - Helsingfors): a. Via Pekka's lists (automatic) a'. via linked lists from the map authorities (automatic) b. Via introspection (manual) c. From Statens Kartverks's coordinates (semi-manual?) Terminology: monolingual names (= no parallel) multilingual names (at least one parallel form) New approach: # We assume that all names are monolingual, i.e. are found in all lgs Thus, turn propernoun-sme-lex into a set of xml files acc to Saara # Find correspondence lists ## Chose a principle ID (Helsinki* Helsset Helsingfors) ## Remove the doublets from the lgs in question ### Remove Helsinki, Helsingfors from sme (oops, cannot be done) ## Make pointers... Wrong track 1: # Split the lexicon according to stem classes (MARJA; DEATNU, etc.) # Manually read the list, and split into two groups: ## Saami names with Norwegian/Finnish/Swedish parallels ## Saami names without N/F/S parallels # Take the N/F/S parallel names out of the pool, and lump them under the relevant id # Repeat this procedure for other parallel classes # The rest category will be the monolingual ones. Wrong track 2: # From the pool, take monolingual names ## Do a reverse-sort ## Look for clearly foreign names ## move them to an intermediate file for monolingual names