2013-09-09 8 views
0

Я хочу извлечь все типы рыб на странице wikipedia и распечатать эти рыбы (я скопировал содержимое в текстовый файл). Я использовал поз тег, а затем используется для извлечения Chunker типы рыб .Но мой вывод содержит ненужные данные, вот код, я реализованИзвлечение определенного типа строки из текстового файла с помощью nltk

import nltk 
from nltk.corpus import stopwords 
from nltk.chunk.regexp import RegexpParser 
#opening the file and reading 
fp = open('C:\\Temp\\fishdata.txt','r') 
text = fp.read() 
lemmatizer = nltk.WordNetLemmatizer() 
stemmer = nltk.stem.porter.PorterStemmer() 
sentence_re = r'''(?x)  # set flag to allow verbose regexps 
     ([A-Z])(\.[A-Z])+\.? # abbreviations, e.g. U.S.A. 
    | \w+(-\w+)*   # words with optional internal hyphens 
    | \$?\d+(\.\d+)?%?  # currency and percentages, e.g. $12.40, 82% 
    | \.\.\.    # ellipsis 
    | [][.,;"'?():-_`]  # these are separate tokens 
''' 
chunker = RegexpParser(r''' 
NP: 
{<NNP><'fish'>} 

''') 
stpwords = stopwords.words('english') 
lemmatizer = nltk.WordNetLemmatizer() 
stemmer = nltk.stem.porter.PorterStemmer() 
toks = nltk.regexp_tokenize(text, sentence_re) 
postoks = nltk.tag.pos_tag(toks) 
sent=chunker.parse(postoks) 
print sent 

Выход я получил

wikipedia 
armored 
fish 
ray-finned 
fish 
jelly 
fish 
constucutive 
then 
oragn 

Выход требуется

armored 
fish 
jelly 
fish 
bony 
fish 

Выше была только небольшая часть выхода, но мне нужно то, что требуется на 2-м выходе Вход на страницу википедии - http://en.wikipedia.org/wiki/Fish, которую я коп в текстовый файл.

+0

привет! некоторые входные данные образца вместе с выходными данными, которые нежелательны, могут помочь. также - нам не нужна вся ваша программа. нам было бы легче взглянуть, если вы обнуляете строки кода, которые не работают должным образом! – arturomp

+0

Я обновил то, что мне нужно, и проблема в сегменте chunker, он производит больше существительных, чем требуется вместе с термином «рыба». – user2737152

ответ

0
from nltk.corpus import wordnet as wn 
fish_words = set() 
fish_types = set() 
for i in wn.all_synsets(): 
    # if 'fish' exist in a word. 
    x = [j for j in i.lemma_names if "fish" in j] 
    fish_words.update(x) 
    # if a word ends with 'fish' 
    y = [j for j in i.lemma_names if "fish" in j[-4:]] 
    fish_types.update(y) 

print fish_types 
print [i.replace("_"," ")[:-4].strip() for i in fish_types] 

Я не уверен, какой из рыбы, которую вы ищете, но эти методы должны дать вам всю рыбу, вам нужно, пока вы зависите от WordNetLemmatizer.

+0

Я не хочу извлекать из wordnet, мне нужно извлечь все типы рыб i.e извлечь имена рыб, которые находятся на странице рыбы wikipedia, используя регулярные выражения expresion и pos. В основном нужно взять термин «рыба» и найти существительные перед ним и после него и отобразить те – user2737152

+0

, используя ту же идею в коде. (а) найти в нем слова с «рыбой» и (б) найти слова, которые заканчиваются «рыбой». В противном случае вам нужно подготовить классификационную модель, чтобы найти, что такое рыба. http://nltk.googlecode.com/svn/trunk/doc/book/ch06.html – alvas

+1

спасибо за информацию, я использовал приведенный выше код, чтобы извлечь весь тип рыбы из wikipedia fish page, я просто извлек все теги с помощью NNP, JJ и NN и поместить в список. Затем я использовал ваш код, чтобы получить все имена рыб. – user2737152

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