zoukankan      html  css  js  c++  java
  • nlpir系统

    发现得多做,就会从小处开始都亲手做自己想,可以学到很多东西,半知半解和不会一样

    一、搭建环境

    1、运行/data1/phplib/build/cg.php 创建的时候遇到一个问题忘记加admin 

    我写的是这样的:sudo php /data1/phplib/Build/cg.php nlpir nlpir.i.hrbbwx.com /data1/htdocs/nlpir.i.hrbbwx.com

    应该是这样的:sudo php /data1/phplib/Build/cg.php nlpir nlpir.i.hrbbwx.com /data1/htdocs/nlpir.i.hrbbwx.com admin

    因为执行上一个命令的话就没有admin模块,输入网址http://nlpir.i.hrbbwx.com/admin/welcome/index提示的是没有找到该文件,查看项目代码确实没有该文件,没有生成admin这个目录

    2、添加域名nlpir.i.hrbbwx.com

    3、修改两个配置文件:一个是nginx /etc/nginx/vhosts/nlpir.i.hrbbwx.com.conf 一个是代码的defined-如下所示

    server {
            listen  80;
            server_name jiaoyudai7.i.hrbbwx.com;
            root /data1/htdocs/jiaoyudai7.i.hrbbwx.com/public;
            access_log  /data2/logs/nginx/jiaoyudai7.i.hrbbwx.com.access.log  main;
            error_log   /data2/logs/nginx/jiaoyudai7.i.hrbbwx.com.error.log;
            location / {
                fastcgi_connect_timeout 10s;
                fastcgi_send_timeout 10s;
                fastcgi_read_timeout 30s;
                fastcgi_buffer_size 128k;
                fastcgi_buffers 8 128k;
                fastcgi_busy_buffers_size 128k;
                fastcgi_temp_file_write_size 128k;
                fastcgi_intercept_errors on;
                fastcgi_pass   web;
                fastcgi_index  index;
                fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_param   PATH_INFO    $document_root$fastcgi_script_name;
                fastcgi_param   x-request-id $txid;
                include        fastcgi_params;
                rewrite ^(.*)$ /index.php$1 break;
            }
    
            location /static {
                            expires 30d;
            }
    
            location /admin {
                fastcgi_connect_timeout 10s;
                fastcgi_send_timeout 10s;
                fastcgi_read_timeout 30s;
                fastcgi_buffer_size 128k;
                fastcgi_buffers 8 128k;
                fastcgi_busy_buffers_size 128k;
                fastcgi_temp_file_write_size 128k;
                fastcgi_intercept_errors on;
                fastcgi_pass   web;
                fastcgi_index  index;
                fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_param   PATH_INFO    $document_root$fastcgi_script_name;
                fastcgi_param   x-request-id $txid;
                include        fastcgi_params;
                rewrite ^(.*)$ /admin.php$1 break;
            }
    }

    二、还有连接数据库的时候报了一个错,就是连接失败,原因是没有开启数据库sudo server mysql start,还有就是因为没有开启数据库,刚开始执行cg.php的时候访问数据库失败没有写入菜单相关数据,现在的任务就是需要拷贝其他项目的数据库,放在手动新建的nlpir这个数据库里面,begin:

    第二个问题是这样解决的,

    方法一:

    mysqldump -uroot -p collection>/tmp/c.spl

    如果需要跨服务器拷贝的话使用

    scp vagrant@172.16.17.12:/tmp/c.sql //tmp/c.sql

    登录服务器,并登录数据库使用

    source /tmp/c.sql

    3、phpstorm格式化代码:command+alt+L

    4、统计图工具:echarts

    统计图工具:http://echarts.baidu.com/tutorial.html#5%20%E5%88%86%E9%92%9F%E4%B8%8A%E6%89%8B%20ECharts

    你可以通过以下几种方式获取 ECharts。

    1. 官网下载界面选择你需要的版本下载,根据开发者功能和体积上的需求,我们提供了不同打包的下载,如果你在体积上没有要求,可以直接下载完整版本。开发环境建议下载源代码版本,包含了常见的错误提示和警告。(我用的是这个方法,)

    2. 在 ECharts 的 GitHub 上下载最新的 release 版本,解压出来的文件夹里的 dist 目录里可以找到最新版本的 echarts 库。

    3. 通过 npm 获取 echarts,npm install echarts --save,详见“在 webpack 中使用 echarts

    4. cdn 引入,你可以在 cdnjsnpmcdn 或者国内的 bootcdn 上找到 ECharts 的最新版本。

    引入 ECharts

    ECharts 3 开始不再强制使用 AMD 的方式按需引入,代码里也不再内置 AMD 加载器。因此引入方式简单了很多,只需要像普通的 JavaScript 库一样用 script 标签引入。

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <!-- 引入 ECharts 文件 -->
        <script src="echarts.min.js"></script>
    </head>
    </html>

    绘制一个简单的图表

    在绘图前我们需要为 ECharts 准备一个具备高宽的 DOM 容器。

    <body>
        <!-- 为 ECharts 准备一个具备大小(宽高)的 DOM -->
        <div id="main" style="width: 600px;height:400px;"></div>
    </body>

    然后就可以通过 echarts.init 方法初始化一个 echarts 实例并通过 setOption 方法生成一个简单的柱状图,下面是完整代码。

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>ECharts</title>
        <!-- 引入 echarts.js -->
        <script src="echarts.min.js"></script>
    </head>
    <body>
        <!-- 为ECharts准备一个具备大小(宽高)的Dom -->
        <div id="main" style=" 600px;height:400px;"></div>
        <script type="text/javascript">
            // 基于准备好的dom,初始化echarts实例
            var myChart = echarts.init(document.getElementById('main'));
    
            // 指定图表的配置项和数据
            var option = {
                title: {
                    text: 'ECharts 入门示例'
                },
                tooltip: {},
                legend: {
                    data:['销量']
                },
                xAxis: {
                    data: ["衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"]
                },
                yAxis: {},
                series: [{
                    name: '销量',
                    type: 'bar',
                    data: [5, 20, 36, 10, 10, 20]
                }]
            };
    
            // 使用刚指定的配置项和数据显示图表。
            myChart.setOption(option);
        </script>
    </body>
    </html>

    三、
    前端的几个知识点

    1、一个是遍历数组

    需要后端传递前端数组的话,这样做,json字符串传过去,前端使用$each()的时候在使用JSON.parse()解析,

    $("#city").on('change', function () {
    //            var html = '';
                $('#artictype').empty();
                $('#year').empty();
                if($(this).val() == 0){
                    $('#artictype').append("<option value='0'>-相关文章-</option>");
                    $('#year').append("<option value='0'>-选择年份-</option>");
                }
                var city_key = $(this).val();
                var relation = '<?=$relation?>';
                var ctype = '<?=$type?>';
                var citysarticle = '<?=$citysarticle?>';
                var firstart;
                $.each(JSON.parse(citysarticle), function(city, v){
                    if(city == city_key) {
                        $.each(v, function(key, article){
                            console.log(firstart);
                            if(!firstart) {
                                firstart = article;
                                $.each(JSON.parse(relation)[city][firstart], function(artk, year){
                                    console.log(year);
                               $('#year').append('<option>'+year+'</option>');
                                });
                            }
                            console.log(JSON.parse(ctype)[article]);
                            $('#artictype').append('<option value='+article+'>'+JSON.parse(ctype)[article]+'</option>');
                        });
                    }
                });
            });            

    2、一个是post传递值

    $.post("<?= APP_ADMIN_PATH?>/nlpir/srceen", {path:path}, function(data) {
        var nhtml = '<div class="panel-body">' +
        '<div class="table-responsive">' + data.content +
        '</div>' +
        '</div>';
        $('#content').append(nhtml);
    });

    3、jquery操作元素的方法

    1)、下拉列表变动:

    $("#artictype").on('change', function () {
                $('#year').html('');//先把需要追加下拉列表,将其选择项清除
                var relation = '<?=$relation?>';
                var city = $('#city option:selected').val();
                var type = $('#artictype option:selected').val();//这个是该下拉列表的选择项的值
                $.each(JSON.parse(relation)[city][type], function(t, y){
                    $('#year').append('<option>'+y+'</option>');//追加选择项到下拉列表
                });
     });

    2)、jquery调用函数

    //开始分析
            $('#analy').click(function(){
                echart();
                screen();
            });
    
            //显示文章内容
            function screen(){
                $('#content').html('');
                var path = $('#city option:selected').val()+'/'+ $('#artictype option:selected').val()+'/'+$('#year option:selected').val();
                $.post("<?= APP_ADMIN_PATH?>/nlpir/srceen", {path:path}, function(data) {
                    var nhtml = '<div class="panel-body">' +
                    '<div class="table-responsive">' + data.content +
                    '</div>' +
                    '</div>';
                    $('#content').append(nhtml);
                });
            };
         function echart(length) {
                length = length || 40;
                var dir = $('#city option:selected').val()+'/'+ $('#artictype option:selected').val()+'/'+$('#year option:selected').val();
                $.post("<?= APP_ADMIN_PATH?>/nlpir/analy", {dir:dir, length:length}, function(data){
                    console.log(data);
                    var words = new Array();
                    var counts = new Array();
                    $.each(data.ndata, function(k, v){
                        words.push(k);
                        counts.push(v);
                    });
                });
            }            

    四、php调用Python

    <?php
    //第一步应该是调用
    //$output = shell_exec('python nlpir.py');
    $output = str_replace(["
    ", "
    ", "	"," "], '', shell_exec('python nlpir.py'));
    echo '啊哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈';
    
    //第二步处理,将$output内容作为字符串来处理
    $array = explode(';', $output);
    //var_dump($array);exit;
    $newarr = [];
    foreach($array as $value) {
            //所以这里的$value的值是 交通,n,名词,留下的是第一个元素,
            $first = explode(',', $value);
            if($first[1] !== 'n') {
                    continue;
            }
            $newarr[] = $first[0];
    }
    
    $vlauecounts = array_count_values($newarr);
    arsort($vlauecounts);
    var_dump(array_slice($vlauecounts, 0, 100));exit;

    五、读取文件内容:

    $dir = $_REQUEST['dir'];
    $filename = "/tmp/zj/{$dir}";
    $handle = fopen( $filename, 'r');
    $contents = fread($handle, filesize ($filename));
    fclose($handle);

    六、过滤数组中key值为空的元素

    第一次尝试是这个,使用了一个php函数array_filter()第一个数组就是需要遍历的数组,将数组中的每个元素都放在第二个函数中做处理。

    //去掉数组里面的' '元素,还有人这个名词
    array_filter($vlauecounts, function($v, $k){

    if(empty($k)){
    unset($k);

    }
}, ARRAY_FILTER_USE_BOTH);//ARRAY_FILTER_USE_BOTH这个的意思是key和value都要用到,默认是只用到value

    第二个是这种的

    if($first[1] !== 'n' || $first[0] == '人' || in_array($first[0], ["
    ", "
    ", "	"," ", " ", "?", "?", "�"]) || $first[0] == ' ' || !$first[0] || preg_match('/s/', $first[0]) || !preg_match('/^[x{4e00}-x{9fa5}]+$/u', $first[0])) {
                    continue;
                }
    preg_match('/^[x{4e00}-x{9fa5}]+$/u', $first[0])这个是过滤非汉字字符的
    " "绿色的这个空格,是人家加上的,直接从打印出来的数组中复制过来的
    还有一个:是否是中文,还有就是系统代码中有个问题,有个?是中文字符的,识别不出来
    if(preg_match('/^[x{4e00}-x{9fa5}]+$/u', $first[0])){
      echo $first[0];
      echo 2;echo '. .';//全是中文
    }else{

        echo $first[0];
        echo 3;echo '. .';//不全是中文            
    }

    七、jquery对数组的操作

    //对象数组
         var trackObj1={
                            "trackId":31,
                            "direcLine":"line31"
                         };
        var currentTrack=[];
    
             currentTrack.push(trackObj1);
    
        var trackObj2={
    
                            "trackId":30,
    
                            "direcLine":"line30"
    
                         };
    
          currentTrack.push(trackObj2);
    
        //判断currentTrack这个数组中是否存在trackId=31的对象
    
        /*按照属性值,查找对象*/
        function findElem(arrayToSearch,attr,val){
            for (var i=0;i<arrayToSearch.length;i++){
                if(arrayToSearch[i][attr]==val){
                    return i;
                }
            }
            return -1;
        }
    
    
         var index=findElem(currentTrack,"trackId","31");
    
    //在jquery中处理JSON数组的情况中遍历用到的比较多,但是用添加移除这些好像不是太//多。
    
    //今天试过json[i].remove(),json.remove(i)之后都不行,看网页的DOM对象中好//像JSON数据是以数组的形式出现的,查阅了下相关JS中数组的操作一试果然很爽。
    
    //记录下来。
    
    //1、数组的创建
    
    var arrayObj = new Array(); //创建一个数组
    var arrayObj = new Array([size]); 
    //创建一个数组并指定长度,注意不是上限,是长度
    var arrayObj = new Array([element0[, element1[, ...[, elementN]]]]); //创建一个数组并赋值
    
    //要说明的是,虽然第二种方法创建数组指定了长度,但实际上所有情况下数组都是变长的,也就是说即使指定了长度为5,仍然可以将元素存储在规定长度以外的,注意:这时长度会随之改变。
    
    //2、数组的元素的访问
    
    var testGetArrValue=arrayObj[1]; //获取数组的元素值
    arrayObj[1]= "这是新值"; //给数组元素赋予新的值
    
    //3、数组元素的添加
    
    arrayObj. push([item1 [item2 [. . . [itemN ]]]]);// 将一个或多个新元素添加到数组结尾,并返回数组新长度
    arrayObj.unshift([item1 [item2 [. . . [itemN ]]]]);// 将一个或多个新元素添加到数组开始,数组中的元素自动后移,返回数组新长度
    arrayObj.splice(insertPos,0,[item1[, item2[, . . . [,itemN]]]]);//将一个或多个新元素插入到数组的指定位置,插入位置的元素自动后移,返回""。
    
    //4、数组元素的删除
    
    arrayObj.pop(); //移除最后一个元素并返回该元素值
    arrayObj.shift(); //移除最前一个元素并返回该元素值,数组中元素自动前移
    arrayObj.splice(deletePos,deleteCount); //删除从指定位置deletePos开始的指定数量deleteCount的元素,数组形式返回所移除的元素
    
    //5、数组的截取和合并
    
    arrayObj.slice(start, [end]); //以数组的形式返回数组的一部分,注意不包括 end 对应的元素,如果省略 end 将复制 start 之后的所有元素
    arrayObj.concat([item1[, item2[, . . . [,itemN]]]]); //将多个数组(也可以是字符串,或者是数组和字符串的混合)连接为一个数组,返回连接好的新的数组
    
    //6、数组的拷贝
    
    arrayObj.slice(0); //返回数组的拷贝数组,注意是一个新的数组,不是指向
    arrayObj.concat(); //返回数组的拷贝数组,注意是一个新的数组,不是指向
    
    //7、数组元素的排序
    
    arrayObj.reverse(); //反转元素(最前的排到最后、最后的排到最前),返回数组地址
    arrayObj.sort(); //对数组元素排序,返回数组地址
    
    //8、数组元素的字符串化
    
    arrayObj.join(separator); //返回字符串,这个字符串将数组的每一个元素值连接在一起,中间用 separator 隔开。
     
  • 相关阅读:
    hdoj2187:悼念512汶川大地震遇难同胞 (贪心)
    2.0其它之Transform详解,以及UIElement和FrameworkElement的常用属性
    2.0外观之样式, 模板, 视觉状态和视觉状态管理器
    2.0图形之Ellipse, Line, Path, Polygon, Polyline, Rectangle
    2.0控件之ListBox, MediaElement, MultiScaleImage, PasswordBox, ProgressBar, RadioButton
    2.0画笔之SolidColorBrush, ImageBrush, VideoBrush, LinearGradientBrush, RadialGradientBrush
    2.0图形之基类System.Windows.Shapes.Shape
    2.0交互之鼠标事件和键盘事件
    2.0控件之ScrollViewer, Slider, StackPanel, TabControl, TextBlock, TextBox, ToggleButton
    2.0交互之InkPresenter(涂鸦板)
  • 原文地址:https://www.cnblogs.com/bigclould/p/9628221.html
Copyright © 2011-2022 走看看