Можно ли создать список, состоящий из процента элементов другого списка? - PullRequest
1 голос
/ 01 апреля 2019

Я пытаюсь создать анализатор зависимостей из корпуса.Корпус имеет формат conll, поэтому у меня есть функция, которая читает файлы и возвращает список списков, в котором каждый список является разобранным предложением (корпус, который я использую, уже проанализирован, моя задача - найти другую альтернативу в этомразобрать).Мой профессор попросил случайно выбрать только 5% предложений в этом корпусе, так как он слишком большой.

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

Функция, которую я сделал для преобразования файлов conll, следующая:

import os, nltk, glob
def read_files(path):
    """
    Function to load Ancora Dependency corpora (GLICOM style)
    path = full path to the files
    returns de corpus in sentences
        each sentence is a list of tuples
            each tuple is a token with the follwoing info:
                index of the token in the sentence
                token
                lemma
                POS /es pot eliminar
                POS
                FEAT /es pot eliminar
                head
                DepRelation
    """
    corpus = []
    for f in glob.glob(path):
        sents1 = open(f).read()[185:-2].split('\n\n')
        sents2 = []
        for n in range(len(sents1)):
            sents2.append(sents1[n].split('\n'))
        sents3 = []
        for s in sents2:
            sent = []
            for t in s:
                sent.append(tuple(t.split('\t')))
            sents3.append(sent)
        corpus.extend(sents3)
    return corpus

Мне нужен способ выбора 5 предложений из каждых 100 в корпусе, чтобы у меня был список списков, содержащих только эти.Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 01 апреля 2019

Просто используйте random.sample:

# define path here
corpus = read_files(path)

random.sample(corpus, len(corpus) // 20)
0 голосов
/ 01 апреля 2019

Можете ли вы добавить цикл для добавления в список? Так что-то вроде этого, который использует оператор модуля "%", который получит только 5 из 100 предложений:

counter = 0
new_list =[]
for i in my_list:
  counter = counter +1 
  if counter % 20 ==0:
       new_list.append(i)
  else:
       continue 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...