Php 从IRC日志中提取文本
我想从irc日志中提取文本。我有来自irssi的常规IRC日志,如下所示:Php 从IRC日志中提取文本,php,regex,irc,lda,Php,Regex,Irc,Lda,我想从irc日志中提取文本。我有来自irssi的常规IRC日志,如下所示: 00:12 -!- Barbora [post@gw1-nat-041.roburnet.sk] has joined #post.sk 00:12 -!- mirinda [~post@195.91.55.136] has quit [Broken pipe] 00:12 -!- rogue1 [post@86-41-114-24-dynamic.b-ras2.lmk.limerick.eircom.net] has
00:12 -!- Barbora [post@gw1-nat-041.roburnet.sk] has joined #post.sk
00:12 -!- mirinda [~post@195.91.55.136] has quit [Broken pipe]
00:12 -!- rogue1 [post@86-41-114-24-dynamic.b-ras2.lmk.limerick.eircom.net] has joined #post.sk
00:12 -!- Komunista is now known as Anonym9901
00:13 -!- ajka [~post@78.141.102.209] has quit [Client exited]
00:16 < blackmamba> no fuj
00:16 < blackmamba> Komunista: lol
00:16 < blackmamba> "este trochu"
00:16 < blackmamba> "je taky velky"
00:17 -!- majopo [post@adsl-d192.84-47-63.t-com.sk] has quit [Client exited]
00:19 -!- Anonym9901 is now known as Komunista
00:19 -!- dido84 [post@BSN-143-83-49.dial-up.dsl.siol.net] has quit [Client exited]
00:19 < Komunista> no?
00:20 < Komunista> ja by som*nadavka*l
00:20 < Komunista> ako pes
00:20 -!- Komunista is now known as Anonym53560
no fuj lol este trochu je taky velky no ja by som*nadavka*l ako pes
所以,只有用空格分隔的单词,没有其他,没有刻痕,没有引用标记,问号等。我需要它作为LDA的输入
我将通过后处理来消除刻痕,我认为这会更容易,还是
我更喜欢带正则表达式的PHP,我不擅长它,这就是为什么我请大家帮忙
谢谢你抽出时间
编辑:
现在我使用这个代码(感谢m.buettner):
$input=;
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,“:-Þ”、“:-Þ”、“:-b”、“:b”、“=P”、“>:o”、“>:o”、“:-o”、“:o”、“:o”,“o.o”、“o.o”、“8-0”、“>:\”、“>:/”、“:-/”、“:-”、“:\”、“=/”、“=\”、“:S”、“:”(“、”;”(“]);
$input=str_替换($smiles,,$input);
$resultStr='';
preg_match_all('/^\d\d:\d\d\s+\s([^\r\n]*)/m',$input,$matches);
$resultStr=内爆(“”,$matches[1]);
$resultStr=preg_replace('/[^\w\s*]+/',''$resultStr);
preg_match_all('//m',$input,$nicks);
$nicks[0]=str_replace(['','%','+','$','@'],'','$nicks[0]);
$resultStr=str_replace($nicks[0],“”,$resultStr);
如有任何改进建议,我们将不胜感激;)诸如此类的建议
preg_match_all('/^\d\d:\d\d\s+<[^>]*>([^\r\n]*)/m', $input, $matches);
$resultStr = implode(' ', $matches[1]);
$resultStr = preg_replace('/[^\w\s*]+/', '', $resultStr);
preg_match_all('/^\d\d:\d\d\s+]*>([^\r\n]*)/m',$input,$matches);
$resultStr=内爆(“”,$matches[1]);
$resultStr=preg_replace('/[^\w\s*]+/',''$resultStr);
首先,我们匹配hh:mm
之后的所有内容,直到行尾。然后,我们将这些结果与空格连接在一起,然后删除所有非单词、非空格、非星号字符。在preg\u replace
的字符类中添加其他要保留的字符,类似这样的情况
preg_match_all('/^\d\d:\d\d\s+<[^>]*>([^\r\n]*)/m', $input, $matches);
$resultStr = implode(' ', $matches[1]);
$resultStr = preg_replace('/[^\w\s*]+/', '', $resultStr);
preg_match_all('/^\d\d:\d\d\s+]*>([^\r\n]*)/m',$input,$matches);
$resultStr=内爆(“”,$matches[1]);
$resultStr=preg_replace('/[^\w\s*]+/',''$resultStr);
首先,我们匹配
hh:mm
之后的所有内容,直到行尾。然后,我们将这些结果与空格连接在一起,然后删除所有非单词、非空格、非星号字符。在preg\u replace
中的character类中添加您想要保留的其他字符类似于Barbora
blackmamba
Komunita
@Fake.It.Til.U.Make.It Just text from humans:)的单词,如果有必要,我将通过后处理来删除刻痕。我不希望IRC服务器上的线条,除了“/me”之外“命令,如果你知道它是什么。关于已经加入了
和其他单词,如Barbora
blackmamba
komunita
@Fake.it.Til.U.Make.it只是来自人类的文本:)如果有必要,我将通过后处理来删除刻痕。我不想从IRC服务器中删除行,除非从“/me”命令。谢谢,但是数组$matches似乎是空的,我有PHP5.4,或者是正则表达式有问题?我试过这个:preg_match_all('/^\d\d:\d\d\s+\s([^\r\n]*)/m',$input,$matches);它对我有效。这是好的解决方案,还是你有更好的解决方案?对不起,我错过了^[]后面的*
。我现在就解决这个问题。如果您的模式匹配所有可能的情况,也没关系。谢谢,但是数组$matches似乎是空的,我有PHP5.4,或者是regex有问题?我尝试过这个:preg_match_all('/^\d\d:\d\d\s+\s([^\r\n]*)/m',$input,$matches);这对我很有效。这是一个好的解决方案,还是您有更好的解决方案?对不起,我错过了[^>]
后面的*
。我现在就解决这个问题。如果您的模式与所有可能的情况都匹配,那么就可以了。