2015-12-03 3 views
-1

У меня есть предложение: «Am/VI/NN good/Adj enough/Prep for/Prep 1/2/NUM», и мне нужно разделить слова и теги и создать два разных словаря - для слов и для тегов. Я видел здесь нить, но не было ни слова о том, чтобы разделить эту штуку - 1/2/NUM.Сплит слова и цифры из тегов python

Так что я полагаю, что я должен сделать что-то вроде этого:

s = "Am/V I/NN good/Prep enough/Prep for/Prep 1/2/NUM" 
sent = s.split() 
for word in sent: 
    word = word.split('/[a-z]') 
dict_of_words = list(words[0]) 
doct_of_tags = list(words[1]) 

но затем я получаю это:

['Am/'V] 
['I/NN'] 
[good/Prep] 
etc. 

Как решить эту проблему?

+3

Что ваш ожидаемый результат? –

+1

Каков ваш ожидаемый результат для этого входа? –

+4

Это не словари, и это плохой стиль, чтобы назвать что-то вроде 'dict _...', если это не dict. –

ответ

3

split на пространствах первых:

s = "Am/V I/NN good/Prep enough/Prep for/Prep 1/2/NUM" 
sent = s.split() 

Тогда для каждого элемента rsplit на / характер:

for item in sent: 
    data = item.rsplit('/', 1) 
    word = data[0] 
    tag = data[1] 

Или, если вы предпочитаете более лаконичный код:

for item in sent: 
    word, tag = item.rsplit('/', 1) 
+0

Спасибо! – Repzz

+1

@Repzz Еще один замечательный момент, который стоит отметить, заключается в том, что в вашем примере вы пытаетесь разбить на несколько символов, чего вы не можете сделать, и используя регулярное выражение в методе разделения строк. Для разделения на несколько символов регулярное выражение является правильным выбором, но вам нужно 'import re' и' re.split (r '/', words) 'например. – binarysubstrate

+0

@binarysubstrate, возможно, это ответ? – shuttle87

0

As отметил в комментариях к отвечу шаттла87, вот сима Например, показано разделение с регулярным выражением, если вам нужно разделить на несколько символов, что вы не можете сделать с помощью метода разделения строк.

import re 

s = "Am/V I/NN good/Prep enough/Prep for/Prep 1/2/NUM" 

parts = s.split(" ") 
words_tags = [re.split(r'/(?=[A-Za-z])', part) for part in parts] 

words = [] 
tags = [] 
for word_tag in words_tags: 
    words.append(word_tag[0]) 
    tags.append(word_tag[1]) 

[ 'Am', 'Я', 'хорошо', 'достаточно', 'для', '1/2']
[ 'V', 'NN', 'Prep' 'Prep', 'Prep', 'NUM']

Regex demo here.

+0

Спасибо! Мне нужно получить 1/2 от «1/2/NUM», и я не могу получить его, используя re.strip – Repzz

+1

@ Repzz это не проблема. Вам просто нужно обновить регулярное выражение до '/ (? = [A-Za -])'. Я обновил свой ответ, чтобы получить желаемый результат. Когда вы снова отправляете вопрос, полезно также указать желаемый результат. :-) – binarysubstrate

+0

еще раз спасибо! знак равно – Repzz

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