Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何在vue单页应用中使用百度地图

如何在vue单页应用中使用百度地图

作者头像
周星星9527
发布于 2021-08-13 07:06:36
发布于 2021-08-13 07:06:36
1.6K00
代码可运行
举报
运行总次数:0
代码可运行

如何在vue单页应用中使用百度地图

原文:https://www.cnblogs.com/jiekzou/p/10485604.html

  作为一名开发人员,每次接到开发任务,我们首先应该先分析需求,然后再思考技术方案和解决方案。三思而后行,这是一个好的习惯。

需求:本项目是采用vue组件化开发的单页应用项目,现需要在项目中引入百度的地图展示功能,用于展示所有项目的分布情况。搜索功能(省略,不是这里介绍的内容).......

交互:选中左侧的项目,选中项高亮,自动定位到右侧地图中项目所在位置,并弹出项目的基本信息。点击右侧的项目,自动高亮显示左侧的项目,并滚动到项目所在位置。地图支持聚合和缩放。

项目运行效果如下图所示:

接下来开始开发:

在vue中引入百度地图

百度开发者平台已经封装了基于vue的地图组件,详细使用,请参考官网:

https://dafrok.github.io/vue-baidu-map/#/zh/start/installation

网上有一些是直接在index.html页面全部引用的,本人强烈反对此种使用方式,因为我们项目是组件化的单页应用,强行引入多页应用的开发方式,会破坏整个项目的框架,严重影响性能。有些甚至还在vue单页应用中引入jquery,感觉这都是一些反人类的骚操作,不到万不得已,不建议使用。

使用方式

我这里只演示单页应用的开发方式。

1.安装组件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ npm install vue-baidu-map --save

2.注册组件

组件的注册可以分为全局注册和局部注册,我这里采用的是局部注册。因为整个项目中仅此一个界面使用。引入官方的说明:

如果有按需引入组件的需要,可以选择局部注册百度地图组件,这将减少工程打包后的容量尺寸。局部注册的 BaiduMap 组件必须声明 ak 属性。所有的独立组件均存放在 vue-baidu-map/components 文件夹下,按需引用即可。由于未编译的 ES 模块不能在大多数浏览器中直接运行,如果引入组件时发生运行时错误,请检查 webpack 的 loader 配置,确认 includeexclude 选项命中了组件库。

引入组件代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    //百度地图
    import BaiduMap from 'vue-baidu-map/components/map/Map.vue'
    import BmScale from 'vue-baidu-map/components/controls/Scale'
    import BmNavigation from 'vue-baidu-map/components/controls/Navigation'
    import BmMarkerClusterer from  'vue-baidu-map/components/extra/MarkerClusterer'
    import BmMarker from 'vue-baidu-map/components/overlays/Marker'
    import BmInfoWindow from 'vue-baidu-map/components/overlays/InfoWindow'

组件注册:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    export default {
        name: "pm-distribution",
        components: {
            BaiduMap,
            BmScale,
            BmNavigation,
            BmMarkerClusterer,
            BmMarker,
            BmInfoWindow
        },
......
代码语言:javascript
代码运行次数:0
运行
复制

3.HTML部分:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
              <baidu-map :style="{width:map.width,height:map.height}" class="map" ak="你的百度地图秘钥" :zoom="map.zoom" :center="{lng: map.center.lng, lat: map.center.lat}"
 @ready="handler" :scroll-wheel-zoom="true">
                    <!--比例尺控件-->
                    <bm-scale anchor="BMAP_ANCHOR_TOP_RIGHT"></bm-scale>
                    <!--缩放控件-->
                    <bm-navigation anchor="BMAP_ANCHOR_BOTTOM_RIGHT" ></bm-navigation>
                    <!--聚合动态添加的点坐标-->
                    <bm-marker-clusterer :averageCenter="true">
                        <bm-marker v-for="marker of markers" :key="marker.code" :position="{lng: marker.lng, lat: marker.lat}" @click="lookDetail(marker)"></bm-marker>
                    </bm-marker-clusterer>
                    <!--信息窗体-->
                    <bm-info-window :position="{lng: infoWindow.info.lng, lat: infoWindow.info.lat}" :title="infoWindow.info.name" :show="infoWindow.show" @close="infoWindowClose" @open="infoWindowOpen">
                        <p><span class="left">单位面积能耗:</span><span class="right">{{infoWindow.info.areaEnergy}}kWh/</span></p>
                        <p><span class="left">建筑面积:</span><span class="right">{{infoWindow.info.area}}</span></p>
                        <p><span class="left">电耗:</span><span class="right">{{infoWindow.info.energy}}kWh</span></p>
                        <p><span class="left">水耗:</span><span class="right">{{infoWindow.info.water}}</span></p>
                        <p><span class="left">气耗:</span><span class="right">{{infoWindow.info.air}}</span></p>
                    </bm-info-window>
                </baidu-map>
代码语言:javascript
代码运行次数:0
运行
复制

寻找共性,提取公共部分,左侧点击项目和地图中点击项目,效果大体一致,都是弹出一个信息框,提取方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
          //查看详情
            lookDetail(data, target){
                this.infoWindow.show =true;
                this.infoWindow.info=data;
                this.activeName = data.name;
                //为弹窗口标题添加title
                this.$nextTick(()=>{
                    var win=document.querySelector(".BMap_bubble_title");
                    win.title = this.activeName;
                })
                if(target=='left'){ //点击的是左侧列表项,则不需要滚动
                    this.map.center={lng: data.lng, lat: data.lat};
                    this.map.zoom = 15;
                    return;
                }
                //滚动到指定元素位置
                this.$nextTick(()=>{
                    var obj=document.querySelector(".active");
                    var scrollTop=obj.offsetTop;
                    this.$refs.box.scrollTop=scrollTop-180;
                })
            },

注意看上述代码,用到了this.$nextTick,这是在vue中如果要对dom进行操作,在此方法中可以保证dom节点已加载完成,vue中是以数据驱动的形式来渲染dom的,也就是说数据修改后,dom不会马上改变,它会排队等待修改。再演示某些程序员的骚操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
                setTimeout(function () {
                     var win=document.querySelector(".BMap_bubble_title");
                     win.title = This.activeName;
                 },300);

注意看:上述代码使用了setTimeout进行延时,来避免数据改变了,但是获取的dom中数据不是最新的情况,虽然大部分情况下可以解决问题,但是存在缺陷。1、你如何确定刚好300毫秒就可以读取到最新的dom数据了。(经验值)2.万一你设置的这个延时时间小了呢?或者数据变更得慢了一些呢?可能你设置了300ms,可实际100ms就已经变更了呢?是不是存在200ms的效率差?等等.....

左侧项目名称超出自动显示省略号

单行文本的溢出显示省略号同学们应该都知道用text-overflow:ellipsis属性来,当然还需要加宽度width属来兼容部分浏览。 实现方法直接通过css样式控制:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
overflow: hidden;
text-overflow:ellipsis;
white-space: nowrap;

左侧项目列表选中项高亮,其它项正常显示

通过定义一个变量activeName ,记录当前选中的项目名称(此处项目名称不可能重复),如果当前项目的名称和activeName 的值一致时,添加一个css样式名称active,然后设置这个样式active高亮(设置背景色啊等等)

如下代码所示:

代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div class="row" v-for="marker of markers" :key="marker.code" @click="lookDetail(marker,'left')" :class="{active: activeName == marker.name}">
代码语言:javascript
代码运行次数:0
运行
复制

点击地图中项目,自动定位到左侧项目选中位置

左侧选中的dom,有一个激活样式active,获取到它的offsetTop属性,然后设置列表容器的scrollTop属性即可。

代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
               //滚动到指定元素位置
                this.$nextTick(()=>{
                    var obj=document.querySelector(".active");
                    var scrollTop=obj.offsetTop;
                    this.$refs.box.scrollTop=scrollTop-180;
                })
代码语言:javascript
代码运行次数:0
运行
复制

注意:点击左侧项目,不需要滚动,只有点击地图中的项目才去滚动。

关于项目信息框中标题超出添加省略号,添加title完整提示

通常我们添加了超出部分省略号,一般都会给其添加一个完整的title显示。在现有的百度提供的InfoWindow组件中是没有封装这个属性的,所以我们通常有两种办法:1.扩展组件源码(耗时)2.直接dom操作。

这里我选择第二种,因为快。浏览器中按F12,可以发现这个标题的HTML代码部分:

代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div class="BMap_bubble_title" style="overflow: hidden; height: auto; line-height: 24px; white-space: nowrap; width: auto;" title="南京高新区管委会行政办公大楼">南京高新区管委会行政办公大楼</div>
代码语言:javascript
代码运行次数:0
运行
复制

我们看到有一个BMap_bubble_title样式,我们可以直接操作这个dom。

代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
               //为弹窗口标题添加title
                this.$nextTick(()=>{
                    var win=document.querySelector(".BMap_bubble_title");
                    win.title = this.activeName;
                })
代码语言:javascript
代码运行次数:0
运行
复制

从左侧树点击项目要修改Zoom,直接定位到项目信息

百度地图中Zoom的详细说明:

地图自动铺满右侧,并且高度全屏且和左侧高度基本一致

但凡这种情况,首先就考虑要计算浏览器的宽高了,当然你也可以使用一些自适应的UI库,我这里直接自己计算的。这个也很简单,获取浏览器可是部分高度,减去一些固定px的长度部分即可。

关于单页应用中的样式问题

我发现一些以前做惯了多页应用开发的人,现在来做单页应用,他会很迷糊,因为在多页应用的世界,每个界面是独立的,每个界面中的样式是互不影响的。而单页应用,通常是一个入口,其它组件(页面)都是按需加载,样式命名相同就冲突了,也就是合并覆盖。避免的方式呢,组件中只自己用的,添加scoped,如果需要覆盖其它的,就在组件容器的最外层添加一个class或者ID(这个在项目中唯一命名),然后覆盖的样式都写在这个容器样式之下。

如局部样式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<style lang="scss" scoped>

全局样式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<style lang="scss">
    .pm-distribution{
        .BMap_bubble_title {
......

完整代码:

代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template>
    <div class="pm-distribution">
        <h3 class="title">项目分布</h3>
        <div class="container" id="container" :style="{height:containerHeight}">
            <div class="left">
                <div class="top">
                    <!--行政区域-->
                    <div class="item fl">
                        <el-select filterable clearable v-model="districtType" style="width: 140px;margin-left: 5px;">
                            <el-option v-for="item in districtTypeOptions" :key="item.value" :label="item.label"
                                       :value="item.value">
                            </el-option>
                        </el-select>
                    </div>
                    <!--项目类型-->
                    <div class="item fl">
                        <el-select filterable clearable v-model="buildType" style="width: 140px;">
                            <el-option v-for="item in buildTypeOptions" :key="item.id" :label="item.name"
                                       :value="item.id">
                            </el-option>
                        </el-select>
                    </div>
                    <div class="item fl" style="margin-left: 10px">
                        <el-select filterable clearable v-model="buildId" style="width: 190px;">
                            <el-option v-for="item in buildOptions" :key="item.code" :label="item.name"
                                       :value="item.code">
                            </el-option>
                        </el-select>
                    </div>
                    <!--查询-->
                    <div class="item query-submit fl" @click="search">
                        <i class="el-icon-search"></i> 查 询
                    </div>
                </div>
                <div class="header">{{markers.length}}个项目<span style="float: right;margin-right: 15px;">今日能耗</span></div>
                <div class="list" :style="{height:leftHeight}">
                    <div class="list-context">
                        <div ref="box" class="list-scroll bmr-y-scroll":style="{height:leftHeight}">
                            <!-- 项目列表-->
                            <div class="listItemDIV">
                          <div class="row" v-for="marker of markers" :key="marker.code" @click="lookDetail(marker,'left')" :class="{active: activeName == marker.name}">
                              <div
                                 class="head-title" v-text="marker.name" :title="marker.name"></div>
                              <div class="row-content">
                                  <span class="item fl"><i class="iconfont nhjc-dianli electricity"></i>{{marker.energy}}kWh</span>
                                  <span class="item fl"><i class="iconfont nhjc-shui water"></i>{{marker.water}}</span>
                                  <span class="item fl"><i class="iconfont nhjc-qi air"></i>{{marker.air}}</span>
                              </div>
                          </div>
                          <div style="clear:both;"></div>
                            </div>
                      </div>
                    </div>
                </div>
            </div>
            <div class="right-context" id="right-context">
                <baidu-map :style="{width:map.width,height:map.height}" class="map" ak="这里填你的百度秘钥" :zoom="map.zoom" :center="{lng: map.center.lng, lat: map.center.lat}" @ready="handler" :scroll-wheel-zoom="true">
                    <!--比例尺控件-->
                    <bm-scale anchor="BMAP_ANCHOR_TOP_RIGHT"></bm-scale>
                    <!--缩放控件-->
                    <bm-navigation anchor="BMAP_ANCHOR_BOTTOM_RIGHT" ></bm-navigation>
                    <!--聚合动态添加的点坐标-->
                    <bm-marker-clusterer :averageCenter="true">
                        <bm-marker v-for="marker of markers" :key="marker.code" :position="{lng: marker.lng, lat: marker.lat}" @click="lookDetail(marker)"></bm-marker>
                    </bm-marker-clusterer>
                    <!--信息窗体-->
                    <bm-info-window :position="{lng: infoWindow.info.lng, lat: infoWindow.info.lat}" :title="infoWindow.info.name" :show="infoWindow.show" @close="infoWindowClose" @open="infoWindowOpen">
                        <p><span class="left">单位面积能耗:</span><span class="right">{{infoWindow.info.areaEnergy}}kWh/</span></p>
                        <p><span class="left">建筑面积:</span><span class="right">{{infoWindow.info.area}}</span></p>
                        <p><span class="left">电耗:</span><span class="right">{{infoWindow.info.energy}}kWh</span></p>
                        <p><span class="left">水耗:</span><span class="right">{{infoWindow.info.water}}</span></p>
                        <p><span class="left">气耗:</span><span class="right">{{infoWindow.info.air}}</span></p>
                    </bm-info-window>
                </baidu-map>
            </div>
        </div>
    </div>
</template>

<script>
    import {
        buildTypeOptionsData,
        districtTypeOptionsData,
        buildOptionsData
    } from "../views/energyAnalysis/energyConsumptionRanking/energyConsumptionRanking"
    import {
        getProgramsType
    } from "../assets/js/bmr-request";
    import GlobalUtil from "../utils/globalUtil";
    import PmDistributionService from "../services/pmDistributionService"

    //百度地图
    import BaiduMap from 'vue-baidu-map/components/map/Map.vue'
    import BmScale from 'vue-baidu-map/components/controls/Scale'
    import BmNavigation from 'vue-baidu-map/components/controls/Navigation'
    import BmMarkerClusterer from  'vue-baidu-map/components/extra/MarkerClusterer'
    import BmMarker from 'vue-baidu-map/components/overlays/Marker'
    import BmInfoWindow from 'vue-baidu-map/components/overlays/InfoWindow'

    export default {
        name: "pm-distribution",
        components: {
            BaiduMap,
            BmScale,
            BmNavigation,
            BmMarkerClusterer,
            BmMarker,
            BmInfoWindow
        },
        data() {
            return {
                districtType: 0,//行政区域
                districtTypeOptions: GlobalUtil.deepCopy(districtTypeOptionsData),//行政区域选项
                buildType: 0,//项目类型
                buildTypeOptions: buildTypeOptionsData,//项目类型选项
                buildId: '',//项目ID
                buildOptions: buildOptionsData, //项目列表
                searchParams:{
                    regions:0,//区域编号
                    proType:0,//项目类型
                    proCode:'',//项目编号
                },
                map:{
                    center: {lng: 118.802422,lat:32.065631},//'南京市',
                    zoom: 12,
                    width:'1000px',
                    height:'710px'
                },
                markers:[],
                infoWindow: {
                    lng: 0,
                    lat: 0,
                    show: false,
                    info:{
                        air: 0,
                        area: 12313,
                        areaEnergy: 0.64,
                        code: "440300A055",
                        energy: 7922.66,
                        lat: "32.043433",
                        lng: "118.784107",
                        name: "市人民检察院",
                        water: 0
                    },
                },
                activeName: '',
                leftHeight:'540px',
                containerHeight:'700px'
            }
        },
        created() {
            this.districtTypeOptions[0].label = '请选择行政区域';
            this.getBuildTypes();
            this.getSelectPro();
        },
        mounted() {
            this.leftHeight=document.body.clientHeight-300+'px';
            this.containerHeight=document.body.clientHeight-150+'px';
        },
        methods: {
            //查询
            search() {
                this.searchParams.regions=this.districtType;
                this.searchParams.proType=this.buildType;
                this.searchParams.proCode=this.buildId;
                this.getProPositionMap();
            },
            infoWindowClose (e) {
                this.infoWindow.show = false
            },
            infoWindowOpen (e) {
                this.infoWindow.show = true
            },
            //查看详情
            lookDetail(data, target){
                // console.log('data',data)
                this.infoWindow.show =true;
                this.infoWindow.info=data;
                this.activeName = data.name;
                // let This=this;
                //为弹窗口标题添加title
                this.$nextTick(()=>{
                    var win=document.querySelector(".BMap_bubble_title");
                    win.title = this.activeName;
                })
                if(target=='left'){ //点击的是左侧列表项,则不需要滚动
                    this.map.center={lng: data.lng, lat: data.lat};
                    this.map.zoom = 15;
                    return;
                }
                //滚动到指定元素位置
                this.$nextTick(()=>{
                    var obj=document.querySelector(".active");
                    var scrollTop=obj.offsetTop;
                    this.$refs.box.scrollTop=scrollTop-180;
                })
            },
            //地图初始化
            handler ({BMap, map}) {
                console.log(BMap, map)
                // this.map.center.lng = 118.802422
                // this.map.center.lat = 32.065631
                // this.map.zoom = 12;
                this.map.width= document.getElementById("container").clientWidth-330+'px';
                this.map.height=document.body.clientHeight -160+'px';
                this.getProPositionMap();
            },
            //获取项目列表
            getSelectPro(){
                 PmDistributionService.instance().getSelectPro({}).then((res) => {
                    if (res.code === 200) {
                       console.log('res',res)
                        res.data.list.unshift({code:'',name:'请输入项目名称'})
                        this.buildOptions=res.data.list;
                    } else {
                        this.$message({
                            message: "获取数据失败",
                            type: "error"
                        });
                    }
                })
            },
            //项目分布地图
            getProPositionMap(){
                PmDistributionService.instance().getProPositionMap(this.searchParams).then((res) => {
                    if (res.code === 200) {
                        // console.log('res',res)
                        this.markers=res.data.list;
                    } else {
                        this.$message({
                            message: "获取数据失败",
                            type: "error"
                        });
                    }
                })
            },
            //获取项目类型
            getBuildTypes() {
                getProgramsType().then(res => {
                    //获取楼建筑下拉框
                    let temArr = new Array();
                    temArr.push({name: '请选择项目类型', id: 0, type: 10})
                    res.array.forEach(function (item, index) {
                        temArr.push(item);
                    })
                    console.log('res.array', res.array)
                    this.buildTypeOptions = temArr;
                });
            },
        }
    }
</script>

<style lang="scss" scoped>
    $bgBlueColor: #1881bf;
    h3.title {
        box-sizing: border-box;
        height: 34px;
        line-height: 34px;
        font-size: 16px;
        font-weight: 600;
        padding: 0 0 0 30px;
        border: 1px #E5EEF3 solid;
        color: #2274A4;
        background: #F5F9F9;
        width: 100%;
        text-align: left;
    }
    .container {
        margin: 0 auto;
        min-width: 1366px;
        padding: 0px;
        min-height: 710px;
        .left {
            width: 320px;
            float: left;
            .header {
                width: 300px;
                clear: left;
                height: 34px;
                line-height: 34px;
                color: black;
                background: #F5F9F9;
                padding-left: 20px;
            }
            .top {
                height: 70px;
                padding: 8px 5px 12px 5px;
            }
        }
        .right-context {
            float: left;
        }
        .item {
            margin: 5px;
            height: 28px;
            line-height: 28px;
            .electricity{
                color: #FFD670;
            }
            .water{
                color:#4EB9DB;
            }
            .air{
                color:#F39795;
            }
            .iconfont{
                font-size: 22px;
            }
        }
        .query-submit {
            width: 90px;
            border-radius: 28px;
            background: $bgBlueColor;
            color: #fff;
            text-align: center;
            cursor: pointer;
        }
        .list{
            .item{
                width: 93px;
                height: 30px;
                line-height: 30px;
                display: block;
            }
            .item.fl{
                float: left;
            }
            .list-context{
                border-radius:5px;margin-top:10px;background:white;
                .list-scroll{
                    margin-top:10px;overflow-y:auto;min-height:537px;overflow-x: hidden;
                    .row{
                        float:left;width:320px;
                        cursor: pointer;
                        .head-title{
                            overflow: hidden;text-overflow: ellipsis;white-space: nowrap;font-size:16px;color:#1781BF;font-weight:400; padding-left: 20px;
                            height: 30px;
                            line-height: 30px;
                        }
                        .row-content{
                            overflow: hidden;text-overflow: ellipsis;white-space: nowrap;padding-bottom:10px;font-size:12px;color:rgb(128, 128, 128);
                            border-bottom: 1px solid #eee; padding-left: 10px;
                        }
                    }
                    .row.active{
                        background-color: #CFDDF3;
                    }
                }
            }
        }
        .map{
           min-width: 800px; width:1000px;height:710px;float:left;background:white;border-radius:5px;margin-left:10px;
            .right{
               text-align: left;
            }
            .left{
                width: 100px;
            }
        }

    }
</style>
<style lang="scss">
    .pm-distribution{
        .BMap_bubble_title {
            color: #2DB7F5 !important;
            font-size: 16px;
            font-weight: 400;
            margin-bottom: 8px;
            overflow: hidden;
            text-overflow:ellipsis;
            white-space: nowrap;
            width: 220px !important;
        }
    }
</style>
代码语言:javascript
代码运行次数:0
运行
复制

说明:本界面所有功能是一天之内赶出来的,所以代码就凑合吧。其它的一些封装的组件代码没有贴出来,因为本篇重点是介绍地图的使用。我见过一些所谓前端工程师的代码,也就那样,有些还时不时的弄一些骚操作,请允许我自恋一下,O(∩_∩)O哈哈~。虽然我不是专业的前端,但是不管是写后端代码还是前端代码,多少要有点追求,有时候为了赶进度,快得了一时,其实误了后面更多时间,很多项目都是被怎么快怎么来玩死的,每天想着以后再重构,以后再重构,到后面就不了了之了..........

  明天是三八节,今天给公司每一位女同胞写贺卡,已经快忘记怎么写字了,中学时代,我可是专业情书枪手呢?O(∩_∩)O哈哈~

博客地址:

http://www.cnblogs.com/jiekzou/

博客版权:

本文以学习、研究和分享为主,欢迎转载,但必须在文章页面明显位置给出原文连接。如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步!再次感谢您耐心的读完本篇文章。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-07-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 传输过程数值模拟学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
NLTK-007:分类文本(文档情感分类)
之前我们看了几个例子,那里文档已经按类别标记。使用这些语料库,我们可以建立分类器。自动给新文档添加适当的类别标签。 首先我们构造一个标记了相应类别的文档清单,对于这个例子,我选择了nltk中的电影评论语料库,将每个评论分为正面或者负面。
李玺
2021/11/22
4240
NLTK-007:分类文本(文档情感分类)
自然语言处理基础知识1. 分词(Word Cut)2. 词性标注(POS Tag)3.自动标注4.文本分类5.评估6.从文本提取信息7.分析句子结构《python自然语言处理》各章总结:
1. 分词(Word Cut) 英文:单词组成句子,单词之间由空格隔开 中文:字、词、句、段、篇 词:有意义的字组合 分词:将不同的词分隔开,将句子分解为词和标点符号 英文分词:根据空格 中文分词:三类算法 中文分词难点:歧义识别、未登录词 中文分词的好坏:歧义词识别和未登录词的识别准确率 分词工具:Jieba,SnowNLP,NlPIR,LTP,NLTK 2. 词性标注(POS Tag) 词性也称为词类或词汇类别。用于特定任务的标记的集合被称为一个标记集 词性:词类,词汇性质,词汇的语义
JasonhavenDai
2018/04/11
9K0
自然语言处理基础知识1. 分词(Word Cut)2. 词性标注(POS Tag)3.自动标注4.文本分类5.评估6.从文本提取信息7.分析句子结构《python自然语言处理》各章总结:
NLTK-008:分类文本(有监督分类的更多例子)
句子分割可以看作是一个标点符号的分类任务:每当我们遇到一个可能会结束的句子的符号,我们必须决定他是否终止了当前句子。
李玺
2021/11/22
5750
NLTK-005:分类和标注词汇
之前大家也肯定学过名字、动词、形容词、副词之间的差异,这些词类不是闲置的,而是对许多语言处理任务都有用的分类,正如我们将看到的,这些分类源于对文本中词的分布的简单的分析。
李玺
2021/11/22
6340
NLTK-005:分类和标注词汇
学习笔记CB001:NLTK库、语料库、词概率、双连词、词典
聊天机器人知识主要是自然语言处理。包括语言分析和理解、语言生成、机器学习、人机对话、信息检索、信息传输与信息存储、文本分类、自动文摘、数学方法、语言资源、系统评测。
利炳根
2018/02/12
1.6K0
Python 数据科学入门教程:NLTK
欢迎阅读自然语言处理系列教程,使用 Python 的自然语言工具包 NLTK 模块。
ApacheCN_飞龙
2022/12/01
4.5K0
Python 数据科学入门教程:NLTK
Python NLTK解读
自然语言处理工具包(Natural Language Toolkit,简称NLTK)是一个用于处理人类语言数据的强大工具包。它提供了丰富的语言处理功能,包括文本分析、词性标注、语法分析、语料库管理等。本教程将介绍如何使用NLTK来处理文本数据,进行各种自然语言处理任务。
Michel_Rolle
2024/01/31
2.7K0
NLTK-006:分类文本(性别鉴定)
分类是为给定的输入选择正确的类标签的任务,在基本的分类任务中,每个输入被认为是与所有其它输入隔离的,并且标签集是预先定义的。下面是分类任务的一些例子:
李玺
2021/11/22
5700
NLTK-006:分类文本(性别鉴定)
统计机器学习方法 for NLP:基于CRF的词性标注
知乎: nghuyong 链接: https://zhuanlan.zhihu.com/p/523164712
zenRRan
2023/01/10
1.1K0
统计机器学习方法 for NLP:基于CRF的词性标注
关于NLP你还不会却必须要学会的事儿—NLP实践教程指南第一编
作者 | Dipanjan (DJ) Sarkar 编译 | 姗姗 出品 | 人工智能头条(公众号ID:AI_Thinker) 【人工智能头条导读】在研究和处理自然语言处理的很多问题时,除了关注各种各样基础的数据,高级的深度学习模型、算法外,其实中间还涉及了很多处理技术,比如:词干提取、词形还原、句法分析、语义分析等,虽然不同的语言特征不同,但是这其中大部分步骤都是存在于大多数NLP领域任务中的。今天特别为大家准备了一篇包含NLP重要技术概念学习和实践的文章,希望无论是基础数据、技术理论还是代码实践大家都可
用户1737318
2018/07/20
1.9K0
在 NLP 中训练 Unigram 标记器
单个标记称为 unigram。Unigram 标记器是一种只需要一个单词来推断单词的词性标记器类型。它有一个单词的上下文。NLTK库为我们提供了UnigramTagger,并从NgramTagger继承而来。
很酷的站长
2023/08/11
3900
在 NLP 中训练 Unigram 标记器
NLP自然语言处理002:NLTK中的语料和词汇资源
import nltk 直接获取语料库的所有文本:nltk.corpus.gutenberg.fileids()
李玺
2021/11/22
6780
NLP自然语言处理002:NLTK中的语料和词汇资源
学习笔记CB005:关键词、语料提取
关键词提取。pynlpir库实现关键词提取。
利炳根
2018/03/06
8620
基于HMM的中文词性标注 POSTagging
给定 标注文本corpus4pos_tagging.txt,训练一个模型,用模型预测给定文本的词性
Michael阿明
2020/07/13
2.2K2
基于HMM的中文词性标注 POSTagging
NLTK在去停用词、分词、分句以及词性标注的使用
这里主要总结一下在python环境下进行自然语言处理的相关包和可能会出现的相关错误,目前接触的都比较Low,但是还是想要记录下来。
张凝可
2019/08/22
2.3K0
Python NLTK 情感分析不正确
一位 Reddit 用户使用 Python 的 NLTK 库来训练一个朴素贝叶斯分类器以研究其他句子的情感,但是无论输入什么句子,分类器总是预测为正面。
用户11021319
2024/07/29
1230
Python NLTK 情感分析不正确
学习笔记CB004:提问、检索、回答、NLPIR
提问,查询关键词生成、答案类型确定、句法和语义分析。查询关键词生成,提问提取关键词,中心词关联扩展词。答案类型确定,确定提问类型。句法和语义分析,问题深层含义剖析。检索,搜索,根据查询关键词信息检索,返回句子或段落。答案抽取,分析和推理检索句子或段落,抽取提问一致实体,根据概率最大对候选答案排序。
利炳根
2018/02/24
8420
NLP最强工具包NLTK入门教程
在当今信息爆炸的时代,自然语言处理(Natural Language Processing, NLP)已成为人工智能领域的重要研究方向之一。无论是机器翻译、情感分析、文本分类,还是语音识别,NLP技术都在其中扮演着关键角色。
皮大大
2025/05/09
2550
「Python实战项目」针对医疗数据进行命名实体识别
命名实体识别(Named Entity Recognition,简称NER),又称作“专名识别”,是指识别文本中具有特定意义的实体,主要包括人名、地名、机构名、专有名词等。通常包括两部分:(1)实体边界识别;(2) 确定实体类别(人名、地名、机构名或其他)。
小小科
2020/08/13
1.8K0
基于word文档,使用Python输出关键词和词频,并将关键词的词性也标注出来
前几天在有个粉丝问了个问题,大概意思是这样的:基于Python代码,要求输出word文档中的关键词和词频,并且将关键词的词性也标注出来,最终输出一个Excel文件,一共3列,列名分别是关键词、词频和词性。
前端皮皮
2023/08/17
2890
基于word文档,使用Python输出关键词和词频,并将关键词的词性也标注出来
推荐阅读
相关推荐
NLTK-007:分类文本(文档情感分类)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验