2

Как я могу преобразовать формат данных, как:Извлечение специфической информации из данных

James Smith was born on November 17, 1948 

в нечто вроде

("James Smith", DOB, "November 17, 1948") 

без необходимости полагаться на позиционной индекс строки

Я попытался следующие

from nltk import word_tokenize, pos_tag 

new = "James Smith was born on November 17, 1948" 
sentences = word_tokenize(new) 
sentences = pos_tag(sentences) 
grammar = "Chunk: {<NNP*><NNP*>}" 
cp = nltk.RegexpParser(grammar) 
result = cp.parse(sentences) 
print(result) 

Как продолжить дальше, чтобы получить результат в желаемом формате.

ответ

1

Вы всегда можете использовать регулярные выражения. Регулярное выражение (\S+)\s(\S+)\s\bwas born on\b\s(\S+)\s(\S+),\s(\S+) будет соответствовать и возвращать данные, в частности, в формате строки выше.

Вот это в действии: https://regex101.com/r/W2ykKS/1

Regex в Python:

import re 

regex = r"(\S+)\s(\S+)\s\bwas born on\b\s(\S+)\s(\S+),\s(\S+)" 
test_str = "James Smith was born on November 17, 1948" 

matches = re.search(regex, test_str) 

# group 0 in a regex is the input string 

print(matches.group(1)) # James 
print(matches.group(2)) # Smith 
print(matches.group(3)) # November 
print(matches.group(4)) # 17 
print(matches.group(5)) # 1948 
1

Разделить строку с «родилась» после этого обрезать пробелы и присвоить имя и доб

Смежные вопросы