我的项目目的:有4个文件。每个都有不同的行数。每行包含一个或几个单词。现在,对于这些文件中的每一个,我想要计算哪个其他文件具有最大的常用词。
文件4行:C,E,F,A
输出:
我的逻辑:
希望知道这是否是解决此问题的权利。
或者有更好的方法来思考这个问题吗?
编辑: 1.忘了添加,将使用php。
答案 0 :(得分:2)
我从像这样的有趣情况中学习了PHP。继续学习。
// put all files in same directory as this script
// put file names in this array
$files = array('1.txt','2.txt','3.txt','4.txt');
$words = array();
$data = '';
$delimiter = "\n"; // change this to \r if running windows OS
// itterate through the files and create a word list
foreach($files as $file){
$fh = fopen($file,'r');
$data .= $delimiter.fread($fh,filesize($file));
fclose($fh);
}
// assuming 1 match per line like your question example
$lines = explode($delimiter,$data);
foreach($lines as $line){
$line = trim($line);
if(empty($line)) continue;
@$words[$line] += 1; // @ suppreses notices
}
var_dump($words);
/* *
* according to your example:
*
array(7) {
["A"]=>
int(3)
["B"]=>
int(1)
["C"]=>
int(4)
["D"]=>
int(2)
["E"]=>
int(3)
["F"]=>
int(2)
["G"]=>
int(1)
}
*/
答案 1 :(得分:1)
应该可以使用array_intersect轻松完成。
答案 2 :(得分:1)
您应该首先对数组进行排序。然后,要计算array1
和array2
之间的公共线数,请设置两个计数器i1
和i2
。
伪代码:
while(i1 < array.length && i2 < array2.length)
if array1[i1] == array2[i2]
++i1; ++i2
++result
else if array1[i1] < array2[i2]
++i1
else
++i2