Сравнение ключевых слов на странице или в файле CSV: PHP? Bash? - PullRequest
2 голосов
/ 01 июля 2011

У меня есть серия ключевых слов на веб-странице HTML - они разделены запятыми, чтобы я мог получить их в CSV, и хотел бы знать, какие из них НЕ находятся в другом CSV-файле, отображаемом в виде HTML-страницы. Как бы вы сделали это сравнение? У меня есть идеи для MySQL и таблиц, но это источники CSV или HTML. Спасибо!

Ответы [ 3 ]

1 голос
/ 01 июля 2011

В Python, учитывая 2 файла csv, a.csv и b.csv, этот скрипт создаст (или отредактирует, если он уже существует) новый файл out.csv, который содержит все в a.csv, которого нет в b.CSV.

import urllib

url = 'http://www.website.com/x.csv'
urllib.urlretrieve(url, 'b.csv')


file_a = open('a.csv', 'r')
file_b = open('b.csv', 'r')    
file_out = open('out.csv', 'w')

list_a = [x.strip() for x in file_a.read().split(',')]
list_b = [x.strip() for x in file_b.read().split(',')]    
list_out = list(set(list_a) - set(list_b)) # Reverse if necessary

file_out.write(','.join(list_out))
file_out.close()
1 голос
/ 02 июля 2011

PHP решение .. Получить ключевые слова в виде строк, затем преобразовать их в массивы и использовать функцию array_diff:

<?php
$csv1 = 'a1, a2, a3, a4';
$csv2 = 'a1, a4';

$csv1_arr = explode(',', $csv1);
$csv2_arr = explode(',', $csv2);

$diff = array_diff($csv1_arr, $csv2_arr);
print_r($diff);

?>

1 голос
/ 01 июля 2011

Если это просто список ключевых слов, вы хотите выполнить поиск и заменить (вы можете использовать sed), чтобы заменить все запятые на возврат каретки.Таким образом, вы получите файл, содержащий одно ключевое слово в каждой строке.Сделайте это с обеими версиями списка.Затем используйте команду «join»:

join -v 1 leftfile rightfile

Это сообщит обо всех записях в левом файле, которые не находятся в правом файле.Не забудьте сначала отсортировать файлы, иначе объединение не будет работать.Также есть инструмент bash для сортировки (не удивительно, что он называется sort).

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