Changed name extraction

svn: r331
This commit is contained in:
Don Allingham 2001-08-12 17:41:49 +00:00
parent 0453816f87
commit e3f7028adc
3 changed files with 249 additions and 35 deletions

View File

@ -759,12 +759,25 @@ def new_database_response(val):
def marriage_edit(family): def marriage_edit(family):
Marriage.Marriage(family,database) Marriage.Marriage(family,database)
#-------------------------------------------------------------------------
#
#
#
#-------------------------------------------------------------------------
def tool_callback(val):
if val:
full_update()
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
# #
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
def full_update(): def full_update():
global id2col
id2col = {}
person_list.clear()
gtop.get_widget(NOTEBOOK).set_show_tabs(Config.usetabs) gtop.get_widget(NOTEBOOK).set_show_tabs(Config.usetabs)
clist = gtop.get_widget("child_list") clist = gtop.get_widget("child_list")
clist.set_column_visibility(4,Config.show_detail) clist.set_column_visibility(4,Config.show_detail)
@ -898,7 +911,7 @@ def update_source_after_edit(source):
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
def on_tools_clicked(obj): def on_tools_clicked(obj):
if active_person: if active_person:
Plugins.ToolPlugins(database,active_person,update_display) Plugins.ToolPlugins(database,active_person,tool_callback)
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
@ -2333,16 +2346,6 @@ def apply_filter():
global id2col global id2col
global alt2col global alt2col
people = database.getPersonMap().values()
names = []
altnames = []
for person in people:
names.append((person.getPrimaryName(),person,0))
if Config.hide_altnames == 0:
for name in person.getAlternateNames():
names.append((name,person,1))
person_list.freeze() person_list.freeze()
datacomp = DataFilter.compare datacomp = DataFilter.compare
@ -2378,6 +2381,9 @@ def apply_filter():
sort.build_sort_name(name),sort_bday,sort_dday]) sort.build_sort_name(name),sort_bday,sort_dday])
person_list.set_row_data(0,pos) person_list.set_row_data(0,pos)
if Config.hide_altnames:
continue
for name in person.getAlternateNames(): for name in person.getAlternateNames():
pos = (person,1) pos = (person,1)
new_alt2col[person].append(pos) new_alt2col[person].append(pos)

View File

@ -23,13 +23,20 @@
import os import os
import re import re
import intl import intl
import utils
_ = intl.gettext _ = intl.gettext
from gnome.ui import * from gnome.ui import *
import libglade
import RelLib import RelLib
import utils import utils
title_list = []
nick_list = []
cb = None
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
# Search each name in the database, and compare the firstname against the # Search each name in the database, and compare the firstname against the
@ -39,46 +46,72 @@ import utils
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
def runTool(database,active_person,callback): def runTool(database,active_person,callback):
global cb
cb = callback
title_re = re.compile(r"^([A-Za-z][A-Za-z]+\.)\s+(.*)$") title_re = re.compile(r"^([A-Za-z][A-Za-z]+\.)\s+(.*)$")
nick_re = re.compile(r"(.+)[(\"](.*)[)\"]") nick_re = re.compile(r"(.+)[(\"](.*)[)\"]")
title_count = 0
nick_count = 0
personMap = database.getPersonMap() personMap = database.getPersonMap()
for key in personMap.keys(): for key in personMap.keys():
person = personMap[key] person = personMap[key]
name = person.getPrimaryName() first = person.getPrimaryName().getFirstName()
first = name.getFirstName()
match = title_re.match(first) match = title_re.match(first)
if match: if match:
groups = match.groups() groups = match.groups()
name.setFirstName(groups[1]) title_list.append((person,groups[0],groups[1]))
name.setTitle(groups[0])
title_count = title_count + 1
match = nick_re.match(first) match = nick_re.match(first)
if match: if match:
groups = match.groups() groups = match.groups()
name.setFirstName(groups[0]) nick_list.append((person,groups[0],groups[1]))
person.setNickName(groups[1])
nick_count = nick_count + 1
if nick_count == 1: msg = ""
msg = _("1 nickname was extracted") if len(nick_list) > 0 or len(title_list) > 0:
if len(nick_list) > 0:
for name in nick_list:
msg = msg + _("%s will be extracted as a nickname from %s\n") % \
(name[2],name[0].getPrimaryName().getName())
if len(title_list) > 0:
for name in title_list:
msg = msg + _("%s will be extracted as a title from %s\n") % \
(name[0].getPrimaryName().getName(),name[1])
base = os.path.dirname(__file__)
glade_file = base + os.sep + "patchnames.glade"
top = libglade.GladeXML(glade_file,"summary")
top.signal_autoconnect({
"destroy_passed_object" : utils.destroy_passed_object,
"on_ok_clicked" : on_ok_clicked
})
top.get_widget("textwindow").show_string(msg)
else: else:
msg = _("%d nicknames were extracted\n") % nick_count GnomeOkDialog(_("No titles or nicknames were found"))
callback(0)
if title_count == 1: #-------------------------------------------------------------------------
msg = msg + "\n" + _("1 title was extracted") #
else: #
msg = msg + "\n" + _("%d titles were extracted") % title_count #
#-------------------------------------------------------------------------
if nick_count > 0 or title_count > 0: def on_ok_clicked(obj):
for grp in nick_list:
name = grp[0].getPrimaryName()
name.setFirstName(grp[1])
grp[0].setNickName(grp[2])
utils.modified() utils.modified()
box = GnomeOkDialog(msg) for grp in title_list:
box.show() name = grp[0].getPrimaryName()
callback(1) name.setFirstName(grp[2])
name.setTitle(grp[1])
utils.modified()
utils.destroy_passed_object(obj)
cb(1)
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
@ -88,6 +121,11 @@ def runTool(database,active_person,callback):
def get_description(): def get_description():
return _("Searches the entire database and attempts to extract titles and nicknames that may be embedded in a person's given name field.") return _("Searches the entire database and attempts to extract titles and nicknames that may be embedded in a person's given name field.")
#-------------------------------------------------------------------------
#
#
#
#-------------------------------------------------------------------------
def get_name(): def get_name():
return _("Database Processing/Extract information from names") return _("Database Processing/Extract information from names")

View File

@ -0,0 +1,170 @@
<?xml version="1.0"?>
<GTK-Interface>
<project>
<name>summary</name>
<program_name>summary</program_name>
<directory></directory>
<source_directory>src</source_directory>
<pixmaps_directory>pixmaps</pixmaps_directory>
<language>C</language>
<gnome_support>True</gnome_support>
<gettext_support>True</gettext_support>
</project>
<widget>
<class>GtkDialog</class>
<name>summary</name>
<title>Gramps - Name and Title Extraction Tool</title>
<type>GTK_WINDOW_TOPLEVEL</type>
<position>GTK_WIN_POS_NONE</position>
<modal>False</modal>
<allow_shrink>True</allow_shrink>
<allow_grow>True</allow_grow>
<auto_shrink>False</auto_shrink>
<widget>
<class>GtkVBox</class>
<child_name>Dialog:vbox</child_name>
<name>dialog-vbox1</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<widget>
<class>GtkHBox</class>
<child_name>Dialog:action_area</child_name>
<name>dialog-action_area1</name>
<border_width>10</border_width>
<homogeneous>True</homogeneous>
<spacing>5</spacing>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>True</fill>
<pack>GTK_PACK_END</pack>
</child>
<widget>
<class>GtkHButtonBox</class>
<name>hbuttonbox1</name>
<layout_style>GTK_BUTTONBOX_END</layout_style>
<spacing>30</spacing>
<child_min_width>85</child_min_width>
<child_min_height>27</child_min_height>
<child_ipad_x>7</child_ipad_x>
<child_ipad_y>0</child_ipad_y>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkButton</class>
<name>button3</name>
<can_default>True</can_default>
<can_focus>True</can_focus>
<signal>
<name>clicked</name>
<handler>on_ok_clicked</handler>
<object>summary</object>
<last_modification_time>Sun, 12 Aug 2001 17:26:36 GMT</last_modification_time>
</signal>
<stock_button>GNOME_STOCK_BUTTON_YES</stock_button>
<relief>GTK_RELIEF_NORMAL</relief>
</widget>
<widget>
<class>GtkButton</class>
<name>button4</name>
<can_default>True</can_default>
<can_focus>True</can_focus>
<signal>
<name>clicked</name>
<handler>destroy_passed_object</handler>
<object>summary</object>
<last_modification_time>Sun, 12 Aug 2001 17:26:57 GMT</last_modification_time>
</signal>
<stock_button>GNOME_STOCK_BUTTON_NO</stock_button>
<relief>GTK_RELIEF_NORMAL</relief>
</widget>
</widget>
</widget>
<widget>
<class>GtkVBox</class>
<name>vbox1</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkLabel</class>
<name>summaryTitle</name>
<width>500</width>
<height>16</height>
<label>Name and Title Extraction Tool</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>0.5</xalign>
<yalign>0.5</yalign>
<xpad>0</xpad>
<ypad>0</ypad>
<child>
<padding>8</padding>
<expand>False</expand>
<fill>False</fill>
</child>
</widget>
<widget>
<class>GtkHSeparator</class>
<name>hseparator1</name>
<child>
<padding>4</padding>
<expand>False</expand>
<fill>True</fill>
</child>
</widget>
<widget>
<class>GtkLabel</class>
<name>label1</name>
<label>Below is a list of the nicknames and titles that Gramps can extract from the
current database. If you select &quot;Yes&quot;, Gramps will modify your database as
specified below. If you do not approve of these changes, you should select
&quot;No&quot;, and your database will not be altered.
Should the following changes be made?</label>
<justify>GTK_JUSTIFY_LEFT</justify>
<wrap>False</wrap>
<xalign>0.5</xalign>
<yalign>0.5</yalign>
<xpad>0</xpad>
<ypad>10</ypad>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>False</fill>
</child>
</widget>
<widget>
<class>GnomeLess</class>
<name>textwindow</name>
<height>250</height>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
</widget>
</widget>
</widget>
</widget>
</GTK-Interface>