Судя по ограниченному контексту вашего вопроса, я считаю, что вы пытаетесь удалить \n
из имени файла, а не из содержимого. Попробуйте это:
numFile = open(sys.stdin.read().rstrip('\n'),'r')
Создайте две таблицы.
В одной есть все о городе.
Один из них содержит несколько названий городов, а внешний ключ связывает этих имен с идентификатором первой таблицы. Таким образом, у вас есть отношения один ко многим между названиями городов и городов.
Теперь единственная проблема заключается в различении одного имени для каждого города, которое является предпочтительным именем. Мы можем сделать это несколькими способами: 1) первая таблица может иметь fk для второй таблицы, которая содержит идентификатор предпочтительного имени. Это создает круговую зависимость, хотя. Так что лучше, 2) просто добавьте логический / битовый столбец во вторую таблицу is_preffered.
create table city (id not null primary key, other columns ) ;
create table city_name (
id not null primary key,
city_id int references city(id),
name varchar(80),
is_preferred bool
) ;
Затем, чтобы получить все имена, с предпочтительным именем сначала:
select name from city_names where city_id = ?
order by is_preffered desc, name;
Это имеет дополнительное преимущество: если вы не охватите все город и город, Вы можете использовать вторую таблицу для отображения городов / деревень / округов, которые вы не покрываете, по основным городам, которые вы делаете:
insert into city_name(city_id, name) values
( $id-for-New-York-City, 'New York'),
( $id-for-New-York-City, 'Manhattan'),
( $id-for-New-York-City, 'Big Apple'),
( $id-for-New-York-City, 'Brooklyn');
Возможно, вы захотите взглянуть на более полнофункциональную систему полнотекстового поиска, такую как Apache Lucene / Solr или Sphinx - которая может поддерживать этот вид сопоставления строк изначально.
То, что я хотел бы сделать, это создать стенографию для обычная таблица, которая сопоставит любое неоднозначное слово с одним непротиворечивым написанием, которое вы будете использовать в своей основной таблице. Вы можете включить в него типичные орфографические ошибки и опечатки.
Прежде чем искать запрос пользователя, преобразуйте все слова в обычную форму, используя эту таблицу.
Так что в вашем случае в сокращении к нормальному
] у нас будет таблица
______________
| short|normal |
|______|_______|
|St |Saint |
|St. |Saint |
Я вижу несколько возможных способов справиться с этим. Одним из них является алгоритм поиска soundex , который соответствует сходству английских строк. Кроме того, это поддерживается изначально в некоторых базах данных, таких как PostgreSQL .
Другой подход может просто заключаться в том, чтобы предложить вашим пользователям функцию автозаполнения, когда при вводе текста появляется ряд предложений. Таким образом, пользователи будут интуитивно выбирать название города для поиска.
В качестве общего подхода вы можете нормализовать элементы как при вставке, так и при поиске.
Правилами нормализации могут быть:
Saint => St
St. => St
и т. д.
Нормализованные имена должны совпадать.
ИМХО, я бы оставил базу данных в покое и вместо этого имел бы список городов в своем приложении. Проще, чище и не требует много лишних.
Мне нравится опция в первом ответе.
Еще одна мысль будет иметь столбец для тегов для этого города, который пользователи могут обновлять.
т.е.
Нью-Йорк Город - это официальное название.
Теги для этого города были бы исчисляемыми (Манхэттен, Нью-Йорк, Нью-Йорк, город, большое яблоко ...) и т. Д., Но вы не хотели бы, чтобы весь этот мусор был в вашей главной таблице городов или для создания ассоциированных дочерние таблицы и должны делать объединения. Так что просто поместите его в столбцы и выполните поиск по критерию поиска, а затем верните правильное имя, если оно найдено.
You can use the built in SQL FTS properties for thesaurus entries. This allows you to buld a custom word map inside full text search . That way you can keep everything inside FTS rather than mix FTS and other queries.
Not sure which version of SQL you are using as its differant between 2005/8 so there is a good walkthrough for 2005 / 8 here http://arcanecode.com/2008/05/28/creating-custom-thesaurus-entries-in-sql-server-2005-and-2008-full-text-search/