2013-03-16 4 views
-1

Я делаю некоторый базовый анализ текста в R и хочу подсчитать количество строк для транскрипта из TXT-файла, который я загружаю в R. В следующем примере, чтобы получить счет, в котором так что г-н Смит = 4, г-н Гордон = 6, г-н Каталано = 3.Строка текстовой строки в R

[71] "\" 511 \ "\ t \"
MR Смит: Г-н Спикер, мне нравится дух, в котором мы согласны с этим. Здесь присутствует администрация FUFA. FUFA можно использовать в качестве проводника, но намерение, Бети Камя воспитывался и какой хот. Роуз Намейинджа сказала был okufuwa - просто давая знак признательности к игрокам, которые достигли этого \ «»
[72] «\» 513 \ «\ т \»
MR Гордона: Большого спасибо. , Г-н Спикер. FUFA - это организация, и игроки - это те, кто получил чашку для нас. Чтобы стимулировать мотивацию во всех видах деятельности, а не только в футбол, вы должны вознаграждать людей, которые преуспели. В этом случае мы слышали о FUFA с их проблемами. Они не оплатили счета за воду, и они могут взять эти деньги, чтобы оплатить счета за воду. Если мы согласны с тем, что эти деньги должны идти к игрокам и тренерам, тогда, когда они туда доберутся, они будут знать сумму, и они будут сидеть между собой и распределяться в соответствии с тем, что мы дадим. (Аплодисменты) Я благодарю вас \ ""
[73] "\" 515 \ "\ т \"
MR Catalano:. Господин спикер, я хочу дать информацию моих дорогих коллег. Дух очень хорош, но вы должны помнить, что администрация FUFA сделала это. Деньги для игроков. Это указывает на то, что FUFA очень заслуживает доверия. Это не старый FUFA, о котором мы говорим. \ ""

Функция countLine() не работает, так как для этого требуется соединение - это только .txt, импортированный в R. Я понимаю, что счет строки к форматированию того, что текст открыт, но любая общая помощь, если это возможно, поможет. Благодарю.

+0

Я не могу получить что-нибудь, чтобы получить мне строки (countLines, length (count.fields()) тоже не работает). Я использовал nchar(), чтобы получить счетчик символов, и может получить количество слов, используя: sapply (gregexpr («\\ W +», statement), function (x) sum (x> 0)) + 1, где каждое утверждение является что-то доставлено г-ном Смитом/Гордоном/Каталано. В худшем случае я могу использовать стилизованное преобразование: предполагая от 10 до 12 слов в строке, я могу подсчитать слова, а затем разделить, но мне было интересно, есть ли что-то более формальное. –

+1

Что случилось с вашим предыдущим вопросом и ответом? http://stackoverflow.com/questions/15326689/how-to-count-text-lines-in-r – Arun

ответ

2

Это поднятый в комментариях, но это на самом деле обнажает быть его собственный ответ:

Вы не можете «считать строки» без определения, что такое «линия». Линия является очень неопределенной концепцией и может варьироваться в зависимости от используемой программы.

Если, конечно, данные не содержат индикатор строки break, такой как \n.Но даже тогда вы не будете считать строк, вы будете считать linebreaks. Вы должны были бы спросить себя, если разрыв жесткой строки соответствует тому, что вы надеетесь проанализировать.

-

Если данные не содержат переносы строк, но вы все еще хотите, чтобы подсчитать количество строк, то мы вернемся к вопросу о том, «как бы вы определили линию»? Самый простой способ, как предлагает @flodel, - использовать длину символа. Например, вы можете определить линию как длиной 76 символов, а затем принять

ceiling(nchar(X)/76)) 

Это, конечно, предполагает, что вы можете вырезать слова. (Если вам нужны слова, чтобы оставаться целыми, то вам нужно получить более умный)

3

Я не думаю, что ваш пример был воспроизводимым, так что я редактировал его, чтобы он содержал то, что вы вывесили, но я не знаю, если имена будут соответствовать:

txtvec <- structure(list(`'511' ` = "MR Smith: Mr Speaker, I like the spirit in which we are agreeing on this. The administration of FUFA is present here. FUFA could be used as a conduit, but the intention of what hon. Beti Kamya brought up and what hon. Rose Namayanja has said was okufuwa - just giving a token of appreciation to the players who achieved this.\"", 
    `'513' ` = "MR Gordon: Thank you very much, Mr Speaker. FUFA is an organisation and the players are the ones who got the cup for us. To promote motivation in all activities, not only football, you should remunerate people who have done well. In this case, we have heard about FUFA with their problems. They have not paid water bills and they can take this money to pay the water bills. If we agree that this money is supposed to go to the players and the coaches, then when it goes there they would know the amount and they will sit among themselves and distribute according to what we will have given. (Applause) I thank you.\"", 
    `'515' ` = "MR Catalano: Mr Speaker, I want to give information to my dear colleagues. The spirit is very good but you must be mindful that the administration of FUFA is what has made this happen. The money to the players. That indicates to you that FUFA is very trustworthy. This is not the old FUFA we are talking about.\""), .Names = c("'511'\t", 
"'513'\t", "'515'\t")) 

Так что это только вопрос или работает регулярное выражение через нее и результаты столов:

> table(sapply(txtvec, function(x) sub("(^MR.+)\\:.+", "\\1", x))) 
#MR Catalano MR Gordon MR Smith 
      1   1   1 

был озабоченность, выраженную, что имена не были в первоначальной структуре. Это еще одна версия с безымянного вектором и слегка измененная регулярное выражение:

txtvec <- c("\"511\"\t\"\nMR Smith: Mr Speaker, I like the spirit in which we are agreeing on this. The administration of FUFA is present here. FUFA could be used as a conduit, but the intention of what hon. Beti Kamya brought up and what hon. Rose Namayanja has said was okufuwa - just giving a token of appreciation to the players who achieved this.\"", 
"\"513\"\t\"\nMR Gordon: Thank you very much, Mr Speaker. FUFA is an organisation and the players are the ones who got the cup for us. To promote motivation in all activities, not only football, you should remunerate people who have done well. In this case, we have heard about FUFA with their problems. They have not paid water bills and they can take this money to pay the water bills. If we agree that this money is supposed to go to the players and the coaches, then when it goes there they would know the amount and they will sit among themselves and distribute according to what we will have given. (Applause) I thank you.\"", 
"\"515\"\t\"\nMR Catalano: Mr Speaker, I want to give information to my dear colleagues. The spirit is very good but you must be mindful that the administration of FUFA is what has made this happen. The money to the players. That indicates to you that FUFA is very trustworthy. This is not the old FUFA we are talking about.\"" 
) 

table(sapply(txtvec, function(x) sub(".+\\n(MR.+)\\:.+", "\\1", x))) 

#MR Catalano MR Gordon MR Smith 
#   1   1   1 

Чтобы подсчитать количество «линий» они будут занимать на оберточной устройство 80 символов в каждой строке вы можете использовать этот код (который легко может быть преобразуется в функцию):

sapply(txtvec, function(tt) 1+nchar(tt) %/% 80) 
#[1] 5 8 4 
+0

+1, но вы можете видеть, что эти '' \ "513 \" \ t \ "' действительно являются частью его строки, поэтому они должны быть частью регулярного выражения. – flodel

+0

Извините, что трудно сохранить формат. Код, который вы производите, полезен, но я надеюсь получить таблицу окончания так, чтобы она подсчитывала строки, которые появляются в приведенном выше тексте, так что г-н Смит = 4, г-н Гордон = 6, г-н Каталано = 3 ; количество строк, переданных каждым человеком, а не счет, если они что-то сказали. –

+0

@ user2154571, я думаю, вы немного смущены. В ваших котировках нет разрывов строк. «Количество строк», которое вы видите, является только результатом обертывания слов и функцией того, насколько велико ваше окно приложения ... – flodel

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