Python: получить определенное нет. строк из словаря - PullRequest
0 голосов
/ 06 января 2012

У меня есть словарь в следующем формате, я разделил различные элементы (где произошла запятая (), используя функцию разделения, и теперь пытаюсь извлечь имена из списка ... я пытаюсь использовать обычныеВыражение, но, очевидно, я не могу быть новичком в Python ... имена имеют следующие форматы ...

  1. имя (пробел) фамилия
  2. имя (пробел) имя (пробел) имя
  3. x.name
  4. xyname
  5. имя (пробел) x. (пробел) (имя)

где x и yпредставьте начальное имя, например J. для john и т. д. также, если вы можете помочь мне удалить "\ t", сохраняя другую информацию без изменений, было бы также здорово.любая помощь будет приветствоваться ... спасибо всем.

[[' I. Antonov', ' I. Antonova', ' E. R. Kandel', ' and R. D. Hawkins. Activity-dependent presynaptic facilitation and hebbian ltp are both required and interact during classical conditioning in aplysia. Neuron', ' 37(1):135--47', ' Jan 2003.'], ['\tSander M. Bohte ', ' Joost N. Kok', ' Applications of spiking neural networks', ' Information Processing Letters', ' v.95 n.6', ' p.519-520'], [' L. J. Eshelman. The CHC Adaptive Search Algorithm: How to Have Safe Search When Engaging in Nontraditional Genetic Recombination. Foundations Of Genetic Algorithms', ' pages 265-283', ' 1990.'], ['Wulfram Gerstner ', ' Werner Kistler', ' Spiking Neuron Models: An Introduction', ' Cambridge University Press', ''], [' D. O. Hebb. Organization of behavior. New York: Wiley', ' 1949.'], [' D. Z. Jin. Spiking neural network for recognizing spatiotemporal sequences of spikes. Physical Review E', '69', ' 2004.'], ['Wolfgang Maass ', ' Christopher M. Bishop', ' Pulsed Neural Networks', ' MIT Press', ' '], ['Wolfgang Maass ', ' Henry Markram', ' Synapses as dynamic memory buffers', ' Neural Networks', ' v.15 n.2', ' p.'], [' H. Markram', ' Y. Wang', ' and M. Tsodyks. Differential signaling via the same axon of neocortical pyramidal neurons. Neurobiology', ' 95:5323--5328', ' April 1998.'], ['\t\tD. E. Rumelhart ', ' G. E. Hinton ', ' R. J. Williams', ' Learning internal representations by error propagation', ' Parallel distributed processing: explorations in the microstructure of cognition', ' vol. 1: foundations', ' MIT Press', ' Cambridge', ' MA', ' 1986 </a> \t\t\t\t\t\t\t\t\t'], ['\t J. D. Schaffer', ' L. D. Whitley', ' and L. J. Eshelman. Combinations of genetic algorithms and neural networks: A survey of the state of the art. In Combinations of Genetic Algorithms and NeuralNetworks', ' 1992.', ' COGANN-92. International Workshop on', ' pages 1--37', ' Philips Labs.', ' Briarcliff Manor', ' NY', ' 6 Jun 1992.'], ['\t S. Song', ' K. D. Miller', ' and L. F. Abbott. Competitive hebbian learning through spike-timing-dependent synaptic plasticity. Nature Neuroscience', ' 3(9):919--926', ' 2000.'], ['\t L. Watts. Event-driven simulation of networks of spiking neurons. Advances in Neural Information Processing Systems', ' 6:927--934', ' 1994.']]

Ответы [ 5 ]

1 голос
/ 06 января 2012

Чтобы удалить вкладку (и другие пустые места в начале или конце строк):

stripped = [s.strip() for t in mylist]

Если честно, если вы пытаетесь извлечь имена, разделение таких строк не поможет - обратите внимание, что некоторые имена по-прежнему группируются вместе с заголовками. Было бы лучше создать хорошее регулярное выражение, которое будет соответствовать именам, и использовать re.findall в отдельных строках.

1 голос
/ 06 января 2012

Похоже, вам придется довольно сильно адаптировать это к вашему входу.Поскольку в анализируемом тексте так много разных слов и конструкций, вы, вероятно, не достигнете 100% точности с созданными вами правилами.Вот пример, однако, если предположить, что ваш исходный текст ввода называется input_text (и я не думаю, что использование метода split () действительно очень полезно, потому что запятые не просто разделяют имена):

import re

regexes = (r'[A-Z][a-z]+ [A-Z][a-z]+', # capitalized first and last name
           r'[A-Z]\. [A-Z][a-z]+')     # capitalized initial, then last name
names = []

for regex in regexes:
    names += re.findall(regex, input_text)

Вы, очевидно, захотите написать дополнительные специальные регулярные выражения для своих разных типов имен.Это делает хорошую работу по поиску имен, но также дает много ложных срабатываний (Information Processing очень похоже на имя, основанное на этих правилах).Это должно дать вам отправную точку.

0 голосов
/ 06 января 2012
  1. лишить всех струн
  2. идентифицирует строку, которая, безусловно, не является именами (очень длинные, те, которые содержат числа, и одну после них в списке)
  3. определить строку, которая обязательно является именем (короткие строки в начале списка, строка начинается с шаблона $ [AZ] [az] {0,3}.? \ S (Dr., Miss, Mr, Prof, и т.д.)
  4. sudy последние строки, которые вы не можете сопоставить с этими правилами, и попытайтесь создать нечеткие правила для выбора, создав коэффициент certidude: ближе к началу списка, более короткие строки будут иметь высокий показатель что-то в конце большого размера. Добавьте подобные критерии и установите минимальный балл.

Если вам нужна высокая точность, используйте loof для базы данных имен и байесовские фильтры.

Это не будет идеально: очень трудно понять разницу между «имя имя имя» и «слово слово слово»

0 голосов
/ 06 января 2012

Может также оказаться, что легче найти какой-либо онлайн-источник информации, где эта работа уже выполнена.Например, в таких местах, как это или это .

0 голосов
/ 06 января 2012

Для удаления вкладок и лишних пробелов используйте strip ():

>>> "\t foobar \t\t\t".strip()
'foobar'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...