Замена синонимов в корпусе с использованием WordNet и NLTK - python - PullRequest
1 голос
/ 01 марта 2011

Попытка написать простой скрипт на Python, который будет использовать NLTK для поиска и замены синонимов в текстовом файле.

Следующий код выдает ошибку:

Traceback (most recent call last):
  File "C:\Users\Nedim\Documents\sinon2.py", line 21, in <module>
    change(word)
  File "C:\Users\Nedim\Documents\sinon2.py", line 4, in change
    synonym = wn.synset(word + ".n.01").lemma_names
TypeError: can only concatenate list (not "str") to list

Вот код:

from nltk.corpus import wordnet as wn

def change(word):
    synonym = wn.synset(word + ".n.01").lemma_names

    if word in synonym:

            filename = open("C:/Users/tester/Desktop/test.txt").read()
            writeSynonym = filename.replace(str(word), str(synonym[0]))
            f = open("C:/Users/tester/Desktop/test.txt", 'w')
            f.write(writeSynonym)
            f.close()

f = open("C:/Users/tester/Desktop/test.txt")
lines = f.readlines()

for i in range(len(lines)):

    word = lines[i].split()
    change(word)

Ответы [ 2 ]

2 голосов
/ 01 марта 2011

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

from nltk.corpus import wordnet as wn
from nltk.corpus.reader.plaintext import PlaintextCorpusReader


corpus_root = 'C://Users//tester//Desktop//'
wordlists = PlaintextCorpusReader(corpus_root, '.*')


for word in wordlists.words('test.txt'):
    synonymList = set()
    wordNetSynset =  wn.synsets(word)
    for synSet in wordNetSynset:
        for synWords in synSet.lemma_names:
            synonymList.add(synWords)
    print synonymList
1 голос
/ 01 марта 2011

Две вещи.Во-первых, вы можете изменить часть чтения файла:

for line in open("C:/Users/tester/Desktop/test.txt"):
    word = line.split()

А во-вторых, .split() возвращает список строк, тогда как ваша функция change, по-видимому, работает только с одним словом за раз.Это то, что вызывает исключение.Ваш word на самом деле является списком.

Если вы хотите обработать каждое слово в этой строке, сделайте так:

for line in open("C:/Users/tester/Desktop/test.txt"):
    words = line.split()
    for word in words:
        change(word)
...