Проблема в сопоставлении строк в Python - PullRequest
0 голосов
/ 02 ноября 2010

Я пытаюсь прочитать из файла и сопоставить определенную комбинацию строк.PFB моя программа:

def negative_verbs_features(filename):

    # Open and read the file content
    file = open (filename, "r")
    text = file.read()
    file.close()

    # Create a list of negative verbs from the MPQA lexicon
    file_negative_mpqa = open("../data/PolarLexicons/negative_mpqa.txt", "r")
    negative_verbs = []
    for line in file_negative_mpqa:
        #print line,
        pos, word = line.split(",")
        #print line.split(",")      
        if pos == "verb":
            negative_verbs.append(word)
    return negative_verbs

if __name__ == "__main__":
    print negative_verbs_features("../data/test.txt")

Файл absolute_mpqa.txt состоит из слова, части речи пар тегов, разделенных запятой (,).Вот фрагмент файла:

abandoned,adj
abandonment,noun
abandon,verb
abasement,anypos
abase,verb
abash,verb
abate,verb
abdicate,verb
aberration,adj
aberration,noun

Я хотел бы создать список всех слов в файле, который имеет глагол как часть речи.Однако, когда я запускаю свою программу и возвращаемый список ( absolute_verbs ) всегда пуст.Цикл if не выполнялся.Я попытался напечатать слово, pos-пару, раскомментировав строку print line.split (",") PFB - фрагмент выходного файла.

['wrongful', 'adj\r\n']
['wrongly', 'anypos\r\n']
['wrought', 'adj\r\n']
['wrought', 'noun\r\n']
['yawn', 'noun\r\n']
['yawn', 'verb\r\n']
['yelp', 'verb\r\n']
['zealot', 'noun\r\n']
['zealous', 'adj\r\n']
['zealously', 'anypos\r\n']

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

PS: я новичок в Python.

Ответы [ 2 ]

2 голосов
/ 02 ноября 2010

Вы сказали, что в файле есть такие строки: abandoned,adj, так что это word, pos пары. Но вы написали pos, word = line.split(","), что означает, что pos == 'abandoned' и word == 'adj' ... Я думаю, понятно, почему список будет пустым: -)

1 голос
/ 02 ноября 2010

Замените строку pos, word = line.split(",") на

word, pos = line.rstrip().split(",")

rstrip () удаляет белые символы (пробелы, новые строки, возврат каретки ...) справа от вашей строки.Обратите внимание, что lstrip () и даже strip () также существуют.Вы также переключили word и pos!

Вы также можете использовать rstrip () вместо переменной word, когда добавляете ее в свой список.

...