Как обработать все элементы текстового файла в R - PullRequest
0 голосов
/ 16 марта 2019

У меня есть один текстовый файл NPFile, который содержит 100 различных газетных статей длиной 3523 строки.Я пытаюсь выбрать и проанализировать различные поля данных для каждой статьи для обработки текста.Это следующие поля: Полный текст: Дата публикации :, Название публикации: и т. Д. *. 1002 *

. Я использую grep, чтобы выбрать различные строки, содержащие нужные мне поля данных.Хотя я могу получить номера строк (начальную и конечную позиции полей), я получаю сообщение об ошибке, когда пытаюсь использовать номера строк, чтобы извлечь фактический текст и поместить его в вектор:

#Find full text of article, clean and store in a variable
findft<-grep ('Full text:', NPFile, ignore.case=TRUE)
endft<-grep ('Publication date:', NPFile)
ftfield<-(NPFile[findft:endft])

Последняя строка ftfield<-(NPFile[findft:endft] выдаёт это предупреждение:

1: In findft:endft : numerical expression has 100 elements: only the first used

Начальная findft и конечная точки endft каждая содержат по 100 элементов, но, как указано в предупреждении,ftfield содержит только первый элемент (длина которого 11 строк).Я предполагал (ошибочно / ошибочно), что соответствующие строки для каждых 100 экземпляров полнотекстового поля будут извлечены и сохранены в ftfield - но, очевидно, я не кодировал это правильно.Буду признателен за любую помощь.

Пример данных (Это поля и данные, связанные с одним из 100 в текстовом файле):

Ожидание 500-летнего наводнения;Буйство Красной реки: суровые погодные явления, новые рекорды встречаются чаще, чем ожидалось.

Полный текст: КАК КРАСНАЯ Река бушевала над самодельными плотинами, бесполезно воздвигнутыми против ее гнева в Северной Дакоте, затопляя города под толщей воды 26футов выше уровня наводнения, метеорологи были в затруднении, чтобы описать его значение в хронологии человека.500-летнее наводнение, как некоторые называют это, катастрофическим погодным явлением, которое могло произойти только один раз с тех пор, как Христофор Колумб прибыл на берег Нового Света.Можно ли назвать это 700-летним наводнением или 300-летним наводнением, остается под вопросом.Размер и мощность наводнения беспрецедентны.В то время как Красная река опустошала верхний Средний Запад раньше, высота гребня наводнения в Фарго и Гранд-Форкс была почти непостижимой.Но климатологические данные нарушаются быстрее, чем когда-либо.100-летний шторм может повториться через несколько лет, как и ожидание еще одного столетия.Это просто способ классификации серьезности, а не частоты.«Столетнего события больше нет», - утверждает климатолог Том Карл из Национального управления океанических и атмосферных исследований.Достоверные и стабильные погодные данные в США насчитывают 150 лет или около того.Человеческое развитие изменило поверхность Земли и атмосферу, способствуя большим изменениям погоды и воздействиям, чем нетронутая среда произвела бы сама.Что может быть 500-летним событием в Чесапикском заливе, неизвестно.Прошлый год стал рекордным для пресной воды в заливе.Поток снега в январе 1996 года в устье реки занял среднесуточное значение, которое превысило поток во время тропического шторма Агнес в 1972 году, что является эталоном для 100-летних метеорологических явлений в этих районах.Но, согласно данным Геологической службы США, воздействие на экосистему залива было не таким разрушительным, как в 1972 году. Уровень моря в заливе поднялся почти на фут за прошедшее столетие, в три раза больше, чем за последние 5000 лет, которые УниверситетМэрилендский ученый Стивен Лезерман связан с глобальным потеплением климата.Устьевые острова и нагорная береговая линия разрушаются ускоренными темпами.Разумеется, рельеф водораздела залива отличается от рельефа Красной реки.Это не просто скорость потока и количество осадков, но то, как вода направляется и куда она может сбежать, не вторгаясь слишком далеко на сушу.Мы можем только надеяться, что пройдет еще 500 лет, прежде чем регион Чесапик будет подвергнут таким испытаниям.Дата публикации: 4/22/97

Дата публикации: 22 апреля 1997 года

Название публикации: The Sun;Балтимор, штат Мэриленд

Название: В ожидании 500-летнего наводнения;Буйство Красной реки: суровые погодные явления, новые рекорды встречаются чаще, чем ожидалось .: [FINAL Edition]


Из приведенного выше примера данных у ftfield 11 строк, когда я его изучал:

[1] "Полный текст: как красная река бушевала над самодельными плотинами, бесполезно воздвигнутыми против ее гнева в Северной Дакоте,Затопляя города под толщей воды в 26 футах над уровнем наводнения, метеорологам было трудно описать его масштабы в хронологии человека. "
[2]" 500-летнее наводнение, некоторые называют его, катастрофическое погодное явление, которое можетпроизошло только один раз с тех пор, как Христофор Колумб прибыл на берега Нового Света. Можно ли это назвать 700-летним наводнением или 300-летним наводнением, под вопросом. "
[3]" Размер и мощность наводненияБеспрецедентный. Хотя Красная река и раньше разрушала верхний Средний Запад, высота гребня наводнения в Фарго и Гранд-Форксе была почти непостижимой. "
[4]" Но климатологические данные нарушаются быстрее, чем когда-либо. A 100-летняя буря может повториться через несколько лет, как ожидание другого столетия. Это простоспособ классификации тяжести, а не частоты.«На самом деле больше не существует столетнего события», - утверждает климатолог Том Карл из Национального управления океанических и атмосферных исследований. »
[5]« Достоверные и стабильные погодные данные в США насчитывают всего 150 лет илитак.Человеческое развитие изменило поверхность Земли и ее атмосферу, способствуя тем самым большим изменениям и эффектам погоды, чем сама нетронутая среда. "
[6]" Что может быть 500-летним событием в Чесапикском заливе, неизвестно.Прошлый год стал рекордным для пресной воды в заливе.Поток снега в январе 1996 года в устье реки занял среднесуточное значение, которое превысило поток во время тропического шторма Агнес в 1972 году, что является эталоном для 100-летних метеорологических явлений в этих районах.Но, согласно данным Геологической службы США, воздействие на экосистему залива было не таким разрушительным, как в 1972 году. "[7]" Уровень моря в заливе поднялся почти на фут в прошлом веке, в три раза быстрее, чем в прошлом.5000 лет, которые ученый из Университета Мэриленда Стивен Лезерман связывает с глобальным потеплением климата.Устьевые острова и нагорная береговая линия разрушаются ускоренными темпами. "
[8]" Топография водораздела залива, конечно, отличается от рельефа Красной реки.Это не просто скорость потока и количество осадков, но то, как вода направляется и куда она может сбежать, не вторгаясь слишком далеко на сушу.Мы можем только надеяться, что пройдет еще 500 лет, прежде чем Чесапикский регион будет подвергнут таким испытаниям. "
[9]" Дата публикации: 4/22/97 "
[10]" "
[11]"Дата публикации: 22 апреля 1997 г. "

И, наконец, findft [1] соответствует endft [1] и так далее, пока findft [100] и endft [100].

Ответы [ 2 ]

0 голосов
/ 16 марта 2019

Мы можем сделать это с Map.Получите последовательность значений для каждого соответствующего элемента от 'findft' до 'endft', затем установите подмножество 'NPFile' на основе этого индекса

Map(function(x, y) NPFile[x:y], findft, endft)
0 голосов
/ 16 марта 2019

Я предполагаю, что findft будет содержать несколько индексов, а также endft. Я также предполагаю, что они оба имеют одинаковую длину, и что они связаны одним и тем же индексом (например, findft[5] соответствует endft[5]), и что вы хотите, чтобы все элементы NPfile были между этими двумя индексами, а также другими парами .

Если это так, попробуйте:

ftfield = lapply(1:length(findft), function(x){ NPFile[findft[x]:endft[x]] })

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...